php的cookie和session相同主域名共享
如何使用chrome查看cookie和session详见另一篇文章,点这里
首先说cookie,
$cookieDomain = '.elf.com';
setcookie('elf', 'im elf cookie', time()+300, '/', $cookieDomain);
如上代码设置的cookie,在主域名为 elf.com的所有二级域名下都能访问该cookie。
然后是session
举例,login.elf.com,bbs.elf.com两个服务器,要实现login.elf.com登录后,bbs自动登录。
login域名登录后写入session($_SESSION['USER'] = 2222),如果bbs能拿到login写入的session($_SESSION['USER'])不为空,就说明已经登录了。
由于session的原理,bbs要拿到login的session要共享,需要两个条件
1、拿到login的session id
2、bbs服务器能访问login服务器上面的session数据。
由于上面已经说了能共享cookie,如果login把自己的session id存放在主域名的cookie里,bbs域名就能通过cookie拿到login服务器的session id了。
login服务器上面只需要这一行:
setcookie('elf_PHPSESSIONID', session_id(), time()+, '/', $cookieDomain);
bbs服务器如下:
$elf_PHPSESSIONID = $_COOKIE['elf_PHPSESSIONID']; session_start(); session_id($elf_PHPSESSIONID); var_dump($_SESSION);
第三行表示使用login服务器的session id,不使用自己的,这样$_SESSION变量里面就有login服务器的session情况了。
结果。。。。不行。。。。
bbs服务器还需要一条配置:
$cookieDomain = '.elf.com'; session_set_cookie_params(, '/', $cookieDomain);
这个必须放在session_start()前面!!!,只有这样bbs服务器的session_id($elf_PHPSESSIONID);这一句才会生效,,,,不然bbs服务器还是会以自己的session id来存放文件,而不是用login的session id来存放。
同理,其他服务器要使用login的session都必须添加这个配置,而且要传入login服务器的session id。
最后附上代码login.elf.com
<?php $cookieDomain = '.elf.com'; session_set_cookie_params(, '/', $cookieDomain); session_start(); $shareSid = isset($_COOKIE['elf_PHPSESSIONID']) ? $_COOKIE['elf_PHPSESSIONID'] : ''; if (empty($shareSid)) {
$shareSid = session_id();
setcookie('elf_PHPSESSIONID', $shareSid, time()+ ,'/', $cookieDomain);
}else{
session_id($shareSid);
} $user = isset($_SESSION['user']) ? $_SESSION['user'] : '';
if (empty($user)) {
$_SESSION['user'] = 'im login from login.elf.com';
} var_dump($_SESSION);
var_dump($_COOKIE);
bbs.elf.com
<?php $cookieDomain = '.elf.com'; session_set_cookie_params(, '/', $cookieDomain); session_start(); $shareSid = isset($_COOKIE['elf_PHPSESSIONID']) ? $_COOKIE['elf_PHPSESSIONID'] : ''; if (empty($shareSid)) {
$shareSid = session_id();
setcookie('elf_PHPSESSIONID', $shareSid, time()+ ,'/', $cookieDomain);
}else{
session_id($shareSid);
} $user = isset($_SESSION['user']) ? $_SESSION['user'] : '';
if (empty($user)) {
$_SESSION['user'] = 'im login from bbs.elf.com';
} var_dump($_SESSION);
var_dump($_COOKIE);
两个域名下的文件,无论从哪个登录,其他域名都能自动成功登录。
但最好还是有一个login的服务器专门用来登录登出控制session这些,方便管理session,
不然如果按照上面的例子,如果从login登录,session会存在login服务器的文件里,如果从bbs登录,session会存在bbs服务器的文件里。
测试的时候记得清cookie!!!
php的cookie和session相同主域名共享的更多相关文章
- 分布式系统登录功能拦截器的实现以及cookie的共享问题(利用cookie实现session在分布式系统的共享)
当我们的网站采用分布式部署系统时,每个子系统拥有自己独立的session,如果不实现session共享,当用户切换系统访问的时候,会不停的提示登录,这对于用户体验是非常不好的.因此对于多个子系统的的访 ...
- java的会话管理:Cookie和Session
java的会话管理:Cookie和Session 1.什么是会话 此处的是指客户端(浏览器)和服务端之间的数据传输.例如用户登录,购物车等 会话管理就是管理浏览器客户端和服务端之间会话过程产生的会话数 ...
- cookie,session原理,以及如何使用chrome查看。
首先,先补充下chrome浏览器的使用. 1.1.php源码: <?php $cookieDomain = '.elf.com'; setcookie(, '/', $cookieDomain) ...
- Java——Cookie与Session
Cookie通过客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 1.Cookie 1.1概念及使用方法 Cookie实际上是一小段文本信息.客户端请求服务器,如果服务 ...
- (进阶篇)浅谈COOKIE和SESSION关系和区别
COOKIE介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 coo ...
- ASP.NET Cookie和Session
Cookie和Session C#在服务器,JS在客户端 客户端验证不能代替服务端验证 Http HTTP属于应用层,HTTP 协议一共有五大特点:1.支持客户/服务器模式;2.简单快速;3.灵活;4 ...
- Python爬虫番外篇之Cookie和Session
关于cookie和session估计很多程序员面试的时候都会被问到,这两个概念在写web以及爬虫中都会涉及,并且两者可能很多人直接回答也不好说的特别清楚,所以整理这样一篇文章,也帮助自己加深理解 什么 ...
- Cookie、Session登陆验证相关介绍和用法
一.Cookie和Session 首先.HTTP协议是无状态的:所谓的无状态是指每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应直接影响,也不会直接 ...
- 内置对象Cookie和Session有何不同【常见面试题】
我们在面试的时候,时常会被问到Cookie和Session的区别,对于初学者来说,有时候会混淆这两个内置对象.下面就我自己的理解,对这2个内置对象进行剖析. 1.Session对象存在Web服务器端, ...
随机推荐
- arcgis对谷歌遥感影像拼接
对于遥感影像的研究多种多样,有小尺度的也有大尺度的还有多尺度的.可以研究一个城市里的一个区,也可以研究一个省甚至全国范围.当研究的区域比较大的时候,在一幅影像上无法包括研究区的所有范围,那么就需要下载 ...
- Vim配置(k-vim)
无意发现一个vim的插件 转载:http://www.cnblogs.com/yxy2829/p/5250587.html 截图 solarized主题 molokai主题 安装步骤 1. clone ...
- CentOS+Apache+mod_wsgi+Python+Django
前言 网上有关的教程千篇一律,都是无脑抄,自己都不验证一遍就直接复制,毫无意义,我通过官方文档和自己摸索,总结了一套教程. Django自带Web服务功能,但那只是方便开发调试,生产环境中一般将Dja ...
- CSS中浏览器开发商特定的CSS属性
浏览器制造商(像Microsoft.Mozilla等,还有WebKit的后台人员等)通常会为他们的浏览器增加新的功能来测试新的特性, 或者实现一直在考虑但还没有得到标准组织批准的CSS扩展.在这些情况 ...
- Unity5 AssetBundle 打包以及加载
using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEditor; us ...
- Word2013创建目录
1.写好文档内容后,将光标移到标题行,点击“开始”里的“样式”->“创建样式”,为该标题创建一个新的样式,同时点击“修改”,在打开的窗口中选择左下方的“格式”,进行标题格式的调整.依次可设定子标 ...
- 通过属性 Cesium的FBO主要支持两种方式
角色其实就是一类权限的分组,所以给用户分配角色其实也是在给用户分配权限.在oracle中有三个比较常用的角色.对于一般不是很严格的系统可以授予开发用户CONNECT.RESOURCE角色权限即可. 其 ...
- 笔记19-徐 如何在超大型数据库上运行DBCC CHECKDB
) --以上方法TB级数据库的DBA可以考虑试试
- 收藏网址 ios开源库
http://www.csdn.net/article/2015-07-21/2825264-27-ios-open-source-libraries/1
- PO、VO、BO、DTO、POJO、DAO
J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手讨论问题的时候,三分钟就被人家满口的专业术语喷晕了,PO VO BO DTO POJO DAO,一大堆的就来了(听过老罗对这种现象的批判的朋 ...