澳门新葡萄京官网首页php单点登录

以前真没在意cookie的作用域问题,可能以前用.com域名没出过问题,今天用公司的一个cn域名测试,怎么也不能实现cookie共享,后来采用js设置cookie,在另外一台服务器上共享cookie成功,真叫气人!翻阅了一下php的cookie
规范 ,里面有这么一段Only hosts within the specified domain can set a
cookie for a domain and domains must have at least two (2) or three (3)
periods in them to prevent domains of the form: .com, .edu, and va.us.
Any domain that fails within one of the seven special top level domains
listed below only require two periods. Any other domain requires at
least three. The seven special top level domains are: COM, EDU, NET,
ORG, GOV, MIL, and INT.看出来了吧,真他娘的草蛋!除了COM, EDU, NET, ORG,
GOV, MIL, and
INT这几个后缀的域名可以设置二级作用域,其他的域名至少三级才可以,也就是说想通过设置作用域为b.cn来实现a.b.cn和c.b.cn下的
cookie共享用php是不行的,php只能实现作用域b.a.cn下的d.b.a.cn和e.b.a.cn间的cookie共享,希望大家注意,再遇到此类问题,别浪费时间拼命的测试了

PHP不同域名cookie共享(单点登录实现原理)

PHP使用P3P完成COOKIE跨域操作

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

为了测试的方便,先编辑hosts文件,加入测试域名

sudo vim /etc/hosts

192.168.1.112 www.a.com

192.168.1.112 www.b.com

代码实现

www.a.com域名下的代码文件:

[a_setcookie.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”);

?>

[a_getcookie.php]

var_dump($_COOKIE);

?>

www.b.com域名下的代码文件:

[b_setcookie.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, “/”, “.b.com”);

?>

[b_getcookie.php]

var_dump($_COOKIE);

?>

依次访问

会发现a.com域上已经有cookie值了

代码分析

在www.b.com的域名下给www.a.com创建cookie。

若用户登录到www.b.com中,由此域名的b_setcookie.html中js实现方式给www.a.com域名设置cookie。

假设www.a.com域名下的a_getcookie.php有cookie则设定www.a.com登录成功。

b_setcookie.html:

总结P3P的在上述代码中最主要的职责是:

跨域产生 cookie

注:上述代码在非IE下测试,即使不发送P3P头信息,也能成功。IE浏览器必需发送P3P才能成功!所以要跨域产生cookie还是有必要发送P3P的,毕竟IE的用户群体还是很大的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注