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服务器端, ...
随机推荐
- Android启动标记
1. Task是包含一系列Activity的堆栈, 遵循先进后出原则. 2. Task默认行为: (1) 前提: Activity A和Activity B在同一个应用中. 操作: Activity ...
- Error:Execution failed for task ':app:dexDebug'.
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ...
- java做的比较完善的FTP上传下载文件服务器源码
Filename: ftp.java Author: leetsing(elove) Create date: 2004-08-30 Use: connect to FTP server,then u ...
- svn本地客户端和eclipse插件对应不上解决
如果你是SVN来管理代码,如果你是用eclipse搞开发,如果你知道eclipse有SVN的插件,那么你一定想用它来直接管理你的代码.但是事情往往非人所愿.当我们用SVN客户端把代码更新到本地,并导入 ...
- 《CoffeeScript应用开发》学习:第三章-构建简单的应用程序
字符串插值 CoffeeScript提供了一种更好的构建字符串的解决方案.在双引号字符串(单引号无效)中使用#{}包含一个动态的值. str = 'Hello, CoffeeScript.' cons ...
- SQL初级语法 [查询: SELECT]
SQL查询: SELECT 普通查询: SELECT "栏位名" FROM "表格名" DISTINCT 查询:(去掉重复) SELECT DISTINCT & ...
- 数据库热备份工具innobackupex的安装
Xtrabackup是由percona开发的一个开源软件,此软件可以说是innodb热备工具ibbackup的一个开源替代品. 这个软件是由2个部分组成的:xtrabackup和innobackupe ...
- MySQL for Windows 解压缩版安装 和 多实例安装
MySQL 5.6 for Windows 解压缩版配置安装 http://jingyan.baidu.com/album/f3ad7d0ffc061a09c3345bf0.html?picindex ...
- tesseract-ocr
tesseract-ocr 第一课 前言 据网上介绍tesseract-ocr性能不错,并且可以支持识别中文了.于是尝试一下. 安装 1.下载地址: https://code.google.com ...
- 谷歌Java编程规范
Google Java编程风格指南 January 20, 2014 作者:Hawstein 出处:http://hawstein.com/posts/google-java-style.html 声 ...