PHP进阶

[php]借助P3P完成COOKIE跨域操作的方法

2017-10-12  本文已影响0人  dejan

在实际应用中,类似的需求有,比如说我们有两个域名,想实现在一个域名登录后,能自动完成另一个域名的登录,也就是单点登录(SSO)功能。

为测试方便,先编辑hosts文件,加入测试域名(C:\WINDOWS\system32\drivers\etc\hosts)

127.0.0.1  www.a.com
127.0.0.1  www.b.com

Apache vhost配置

<virtualhost *:80>
    ServerName    www.a.com
    DocumentRoot  F:\WWW\a
</virtualhost>
<virtualhost *:80>
    ServerName    www.b.com
    DocumentRoot  F:\WWW\b
</virtualhost>

首先,在 F:\WWW\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("test", $_GET['id'], time()+3600, "/", ".a.com");

然后,同上在 F:\WWW\a 目录下创建 index.php 文件:

<?php  
var_dump($_COOKIE);

最后,在 F:\WWW\b 目录下创建 index.php 文件:

<script src="http://www.a.com/setcookie.php?id=www.b.com"></script>

三个文件创建完毕后,通过浏览器依次访问:

http://www.b.com/
http://www.a.com/

在访问www.b.com域时,并没有在www.a.com域设置上cookie值。
然后,修改一下setcookie.php文件去掉header前的注释符号,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("test", $_GET['id'], time()+3600, "/", ".a.com");

再次通过浏览器依次访问:

http://www.b.com/
http://www.a.com/

看看是不是已经实践跨域的访问了。

上一篇下一篇

猜你喜欢

热点阅读