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
PHP不同域名cookie共享(单点登录实现原理)的更多相关文章
- 通过设置cookie实现单点登录
最近要做个登录一个客户端跳转到另一个网站不用再登录,有两种方法,第一种就是写接口通过客户端传值账号直接到目标网站,另一种是写入cookie到目标网站.由于目标网站之前就是通过cookie实现单点登录, ...
- SSO单点登录学习总结(2)——基于Cookie+fliter单点登录实例
1.使用Cookie解决单点登录 技术点: 1.设置Cookie的路径为setPath("/").即Tomcat的目录下都有效 2.设置Cookie的域setDomain(&quo ...
- 浅析C#中单点登录的原理和使用
什么是单点登录?我想肯定有一部分人"望文生义"的认为一个用户只能在一处登录.其实这是错误的理解(我记得我第一次也是这么理解的).单点登录指的是多个子系统只需要登录一个,其他系统不需 ...
- SSO单点登录实现原理与总结
一.什么是单点登录SSO(Single Sign-On) SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用 ...
- portal单点登录的原理与实现还有ESB
portal单点登录的原理与实现还有ESB 在毕业论文中有描述到这一点.我给我出的截图
- SSO单点登录实现原理
SSO单点登录实现原理 只是简要介绍下基于java的实现过程,不提供完整源码,明白了原理,我相信你们可以自己实现.sso采用客户端/服务端架构,我们先看sso-client与sso-server要实现 ...
- php实现单点登录,顶级域名与子域名间共享Cookie实现单点登录原理
这是一个简单版的php单点登录概述,如果需要实现复杂的需自己,编写复杂的ticket加解密算法. 先看张图. sso系统,http://sso.yxh.com 1 2 3 4 5 <?php ...
- 使用Cookie实现跨域单点登录的原理
对于构建分布式系统来说业务功能的物理部署会随着新业务模块的增加而增加或改变物理部署的位置.而每个用户都有统一的帐号作为我们登录系统时的一个认证.当新业务或子系统部署在不同的物理机上,我们去访问不同的业 ...
- SpringBoot 整合Shiro实现动态权限加载更新+Session共享+单点登录
作者:Sans_ juejin.im/post/5d087d605188256de9779e64 一.说明 Shiro是一个安全框架,项目中主要用它做认证,授权,加密,以及用户的会话管理,虽然Shir ...
随机推荐
- NDK学习二: NDK目录结构
NDK目录结构 NDK下载好之后目录结构如下: 目录名 描述 build 存放和编译相关的脚本文件,最外面的ndk-build就是调用该目录下的makefile文件,其中mak ...
- jQuery清除文本框,内容并设置不可用
JQuery清除文本框,内容并设置不可用 如果是设置只读,则将disabled换成readonly function CleanText(textid) { $("#"+text ...
- poj 2524 (并查集)
http://poj.org/problem?id=2524 题意:在一所学校里面的人,都有宗教信仰,不过他们的宗教信仰有可能相同有可能不同,但你又不能直接去问他们,但你可以问他们和谁是同一个宗教.通 ...
- POJ 1002
#include <stdio.h> #include <string.h> #include <stdlib.h> struct In{ int a; ]; }p ...
- c# 获取系统版本,获取net framework 版本(Environment 类)
1.获取当前操作系统版本信息 使用Environment.OSVersion 属性 获取包含当前平台标识符和版本号的 OperatingSystem 对象. 命名空间: System程序集: ms ...
- pt-query-digest使用介绍【转】
本文来自:http://isadba.com/?p=651 一.pt-query-digest参数介绍. pt-query-digest --user=anemometer --password=an ...
- SQL中关于字符串的处理
DECLARE @STR VARCHAR(MAX),@PRAM VARCHAR(20)SET @STR='中华人民共和国万岁'--字符串连接SET @STR=@STR+'an'+@STR --字符串拆 ...
- diff & pattch 命令
基础知识 该命令的功能为逐行比较两个文本文件,列出其不同之处.它比comm命令完成更复杂的检查.它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序. 语法:diff ...
- 关于call 和 apply
权威指南上的说法是:可以将call 和apply看做是某个对象的方法,通过调用方法的形式 间接调用函数:需要重点说明是 :通过call和apply 调用的 函数:具体用法--->如下: 1.先说 ...
- assign() 方法
assign() 方法可加载一个新的文档. 语法 location.assign(URL) <html> <head> <script type="text/j ...