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

时间: 2024-08-08 22:07:50

PHP不同域名cookie共享(单点登录实现原理)的相关文章

【No.2】CAS单点登录的原理分析

上一篇说了基于Cookie的单点登录的实现:http://blog.csdn.net/readiay/article/details/52814001,虽然他实现简单,但是也问题颇多.例如:用户名密码不停传送,增加了被盗号的可能.另外,不能跨域! 1.基于Cookie的单点登录的回顾 基于Cookie的单点登录核心原理: 将用户名密码加密之后存于Cookie中,之后访问网站时在过滤器(filter)中校验用户权限,如果没有权限则从Cookie中取出用户名密码进行登录,让用户从某种意义上觉得只登录

SSO单点登录实现原理与总结

一.什么是单点登录SSO(Single Sign-On) SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证. 二.单点登录解决了什么问题 解决了用户只需要登录一次就可以访问所有相互信任的应用系统,而不用重复登录. 例如CSDN中的论坛应用,博客应用,下载应用模块.我们只要在CSDN中访问任何一个子应用后,再访问其他应用站点的时候就不需要在进行登录. 三.在公司里面也

使用Cookie实现跨域单点登录的原理

对于构建分布式系统来说业务功能的物理部署会随着新的业务模块的增加而增加或改变物理部署的位置.而每个用户都有统一的帐号作为我们登录系统时的一个认证.当应用程序部署在不同的物理机上,我们去访问不同的业务功能时,需要再次登录并记录每个业务对应的用户名和密码,这样会造成很大的麻烦,耽误工作效率,浪费很多时间.这种情况如果我们不引入CAS单点跨域登录原理,影响信息化给我们带来的便捷性和高效性,也会影响一定的用户体验. CAS跨域单点登录原理实现思想如下图更能清晰的描绘出来,我们来看看吧!

SpringBoot 整合Shiro实现动态权限加载更新+Session共享+单点登录

作者:Sans_ juejin.im/post/5d087d605188256de9779e64 一.说明 Shiro是一个安全框架,项目中主要用它做认证,授权,加密,以及用户的会话管理,虽然Shiro没有SpringSecurity功能更丰富,但是它轻量,简单,在项目中通常业务需求Shiro也都能胜任. 二.项目环境 MyBatis-Plus版本: 3.1.0 SpringBoot版本:2.1.5 JDK版本:1.8 Shiro版本:1.4 Shiro-redis插件版本:3.1.0 数据表(

Cookie同域,跨域单点登录(转)

Cookie 同域单点登录 最近在做一个单点登录的系统整合项目,之前我们使用控件实现单点登录(以后可以介绍一下).但现在为了满足客户需求,在不使用控件情况下实现单点登录,先来介绍一下单点登录. 单点登录:多个不同系统整合到统一加载个平台,用户在任何一个系统登录后,可以访问这个统一加载上的所有系统.登录之后,用户的权限和信息不再受某个系统的限制,即使某个系统出现故障(包括统一加载平台),其他系统还是能正常使用的.这就需要用户权限等信息保存到客户端,不受服务器的限制. 在cookie相关文档信息中,

单点登录(两种单点登录类型:SSO/CAS、相同一级域名的SSO)

单点登录:SSO(Single Sign On) 什么是单点登录:大白话就是多个网站共享一个用户名和密码的技术,对于普通用户来说,只需要登录其中任意一个网站,登录其他网站的时候就能够自动登陆,不需要再输入 用户名和密码了. 单点登录类型: 1.具有相同一级域名的多个网站,以新浪为例,新浪首页实际上是一个导航页面,它提供了很多很多的旗下网站地址,比如 (1)新浪新闻: http://news.sina.com.cn/ (2)新浪科技:http://tech.sina.com.cn/ (3)新浪博客

XSS跨站脚本攻击防御和Cookie,及SSO单点登录原理

XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性.其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的.如,盗取用户Cookie.破坏页面结构.重定向到其它网站等. XSS攻击 XSS攻击类似于SQL注入攻击,攻击之前,我们先找到一个存在XSS漏洞的网站,XSS漏洞分为两种,一种是DOM Based X

单点登录(二)使用Cookie+File实现单点登录登出(附源码)

上一篇文章<单点登录(一)使用Cookie+File实现单点登录>中,我们实现了单点登录的功能. 本文作为上一篇文章的扩展部分,添加"单点登出"功能. 源码下载:链接: http://pan.baidu.com/s/1bn57xCF 密码: 5apa 本例实现效果 浏览器中输入网址:main.tgb.com,后输入用户名:it_main(以it开头即可)和密码pwd_main(以pwd开头即可),勾选"一周内自动登录".点击"登录"按

单点登录原理及简单实现

一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系 但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求:要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求:要鉴别浏览器请求,必须清楚浏览器请求状态.既然http协议无状态,那就让