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]
<?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]
<?php  
var_dump($_COOKIE); 

?>

www.b.com域名下的代码文件:
[b_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, "/", ".b.com");

?>

[b_getcookie.php]
<?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:

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

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

跨域产生 cookie

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

参考:

http://my.oschina.net/goal/blog/199978

分类: JAVASCRIPT
 
 
本文转自左正博客园博客,原文链接: http://www.cnblogs.com/soundcode/p/7233737.html,如需转载请自行联系原作者
相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
2月前
|
安全 PHP
从建站到拿站 -- PHP(Cookie设置)
从建站到拿站 -- PHP(Cookie设置)
20 0
|
3月前
|
域名解析 监控 网络协议
分享40个主机域名PHP源码,总有一款适合你
分享40个主机域名PHP源码,总有一款适合你
82 1
|
3月前
|
Java Maven
单点登录基于Cookie开发思路整理
单点登录基于Cookie开发思路整理
|
3月前
|
存储 安全 PHP
php案例 解决cookie失效后使用session的问题
php案例 解决cookie失效后使用session的问题
php案例 解决cookie失效后使用session的问题
|
3月前
|
存储 Web App开发 安全
PHP会话技术跟踪和记录用户?使用cookie会话你必须掌握
PHP会话技术跟踪和记录用户?使用cookie会话你必须掌握
35 0
|
4月前
|
存储 JavaScript 前端开发
百度搜索:蓝易云【php设置和获取Cookie教程。】
需要注意的是,为了确保在向浏览器发送任何输出之前设置Cookie,应该在 `<html>`标签之前或PHP脚本的顶部设置Cookie。
73 0
|
5月前
|
PHP 数据库
php cookie 代码
php cookie 代码
18 0