php

php中通过设置p3p头解决cookie跨域访问问题

dafenqi
2023-08-04 / 0 评论 / 17 阅读 / 正在检测是否收录...

php中通过设置p3p头解决cookie跨域访问问题 :
大家都知道cookie是不能跨域的,但可以通过设置p3p头来解决这个问题.
为了测试先编辑hosts文件,加入测试域名(在C:WINDOWS\system32\drivers\etc\hosts)
127.0.0.1 www.a.com
127.0.0.1 www.b.com
首先:在www.a.com网站,创建 a_setcookie.php 文件,内容如下:

<?php
//header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie("key", 'val_'.time(), time()+3600, "/", ".a.com");

?>

然后:创建 a_getcookie.php 文件,内容如下:
var_dump($_COOKIE);
最后:在www.b.com网站, 创建 b_setcookie.php 文件,内容如下:

<script src="http://www.a.com/a_setcookie.php"></script> 

三个文件创建完毕后,我们通过浏览器依次访问:
http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php

我们会发现,在访问b.com域的时候,我们并没有在a.com域设置上cookie值。
然后我们修改一下a_setcookie.php文件,去掉注释符号,a_setcookie.php即为:

<?php
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie("key", 'val_'.time(), time()+3600, "/", ".a.com");

?>

再次通过浏览器依次访问:
http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php

这次,你会发现在访问b.com域的时候,我们设置了a.com域的cookie值。
似乎只有IE对跨域访问COOKIE限制比较严格,上述代码在FIREFOX下测试,即使不发送P3P头信息,也能成功。

0

Deprecated: strtolower(): Passing null to parameter #1 ($string) of type string is deprecated in /www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php on line 1032

评论 (0)

取消