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

本文涉及的产品
.cn 域名,1个 12个月
简介:

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,如需转载请自行联系原作者
相关文章
|
2月前
|
域名解析 监控 网络协议
分享40个主机域名PHP源码,总有一款适合你
分享40个主机域名PHP源码,总有一款适合你
196 1
|
2月前
|
安全 PHP
从建站到拿站 -- PHP(Cookie设置)
从建站到拿站 -- PHP(Cookie设置)
28 0
|
2月前
|
Java Maven
单点登录基于Cookie开发思路整理
单点登录基于Cookie开发思路整理
|
27天前
|
PHP
php 获取带http或https的域名
php 获取带http或https的域名
22 4
|
2月前
|
存储 安全 Java
基于 Cookie 的信息共享机制
基于Cookie的信息共享机制用于客户端状态保持。Cookie是服务器生成并发送到浏览器的文本文件,存储用户状态和安全信息。当用户发起请求时,浏览器会将Cookie一并发送,服务器据此处理。Cookie分为内存和硬盘两种,有持久和非持久之分,但因以明文存储,存在安全隐患。JSP/Servlet中的Cookie类提供管理方法。示例代码展示了如何使用JSP设置和检查Cookie。需注意Cookie的安全问题,避免数据泄露。
34 3
|
1月前
|
存储 安全 关系型数据库
安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用&后台模块&Session&Cookie&Token&身份验证&唯一性
安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用&后台模块&Session&Cookie&Token&身份验证&唯一性
|
2月前
|
存储 缓存 安全
【PHP开发专栏】PHP Cookie与Session管理
【4月更文挑战第30天】本文介绍了PHP中的Cookie和Session管理。Cookie是服务器发送至客户端的数据,用于维持会话状态,可使用`setcookie()`设置和`$_COOKIE`访问。Session数据存于服务器,更安全且能存储更多数据,通过`session_start()`启动,`$_SESSION`数组操作。根据需求选择Cookie(跨会话共享)或Session(单会话存储)。实战中常组合使用,如Cookie记住登录状态,Session处理购物车。理解两者原理和应用场景能提升Web开发技能。
|
2月前
|
存储 移动开发 缓存
多个WKWebView页面的cookie不共享问题及解决方案
多个WKWebView页面的cookie不共享问题及解决方案
29 0
|
2月前
|
PHP
php curl获取cookie
php curl获取cookie
26 0