php单点登录

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);

?>

依次访问

http://www.b.com/b_setcookie.php

http://www.a.com/a_getcookie.php

会发现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的用户群体还是很大的。

你可能感兴趣的:(php单点登录)