如何使用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相同主域名共享的更多相关文章

  1. 分布式系统登录功能拦截器的实现以及cookie的共享问题(利用cookie实现session在分布式系统的共享)

    当我们的网站采用分布式部署系统时,每个子系统拥有自己独立的session,如果不实现session共享,当用户切换系统访问的时候,会不停的提示登录,这对于用户体验是非常不好的.因此对于多个子系统的的访 ...

  2. java的会话管理:Cookie和Session

    java的会话管理:Cookie和Session 1.什么是会话 此处的是指客户端(浏览器)和服务端之间的数据传输.例如用户登录,购物车等 会话管理就是管理浏览器客户端和服务端之间会话过程产生的会话数 ...

  3. cookie,session原理,以及如何使用chrome查看。

    首先,先补充下chrome浏览器的使用. 1.1.php源码: <?php $cookieDomain = '.elf.com'; setcookie(, '/', $cookieDomain) ...

  4. Java——Cookie与Session

    Cookie通过客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 1.Cookie  1.1概念及使用方法 Cookie实际上是一小段文本信息.客户端请求服务器,如果服务 ...

  5. (进阶篇)浅谈COOKIE和SESSION关系和区别

    COOKIE介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 coo ...

  6. ASP.NET Cookie和Session

    Cookie和Session C#在服务器,JS在客户端 客户端验证不能代替服务端验证 Http HTTP属于应用层,HTTP 协议一共有五大特点:1.支持客户/服务器模式;2.简单快速;3.灵活;4 ...

  7. Python爬虫番外篇之Cookie和Session

    关于cookie和session估计很多程序员面试的时候都会被问到,这两个概念在写web以及爬虫中都会涉及,并且两者可能很多人直接回答也不好说的特别清楚,所以整理这样一篇文章,也帮助自己加深理解 什么 ...

  8. Cookie、Session登陆验证相关介绍和用法

    一.Cookie和Session 首先.HTTP协议是无状态的:所谓的无状态是指每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应直接影响,也不会直接 ...

  9. 内置对象Cookie和Session有何不同【常见面试题】

    我们在面试的时候,时常会被问到Cookie和Session的区别,对于初学者来说,有时候会混淆这两个内置对象.下面就我自己的理解,对这2个内置对象进行剖析. 1.Session对象存在Web服务器端, ...

随机推荐

  1. java利用Aspose.slides.jar将本地ppt文档转化成pdf(完美破解版 无水印 无中文乱码)

    下载aspose.slides-15.9.0.jar包 http://pan.baidu.com/s/1jH3ZNbK JAVA代码 package webViewer; import java.io ...

  2. VIM编辑器之常用命令

     分类: vim   目录(?)[-] 第一级 存活 第二级 感觉良好 第三级  更好更强更快 更好 更强 更快 第四级 Vim 超能力 在当前行上移动光标 0   f F t T 区域选择 acti ...

  3. C# MVC ( 添加路由规则以及路由的反射机制 )

    在项目文件夹下找到 App_Start 下 找到 RouteConfig.cs文件 打开   (1) 约束的规则 从上往下 贪婪性   (2) 用 routes.MapRoute(...) 添加   ...

  4. iOS强制屏幕旋转

    /** 强制旋转屏幕为纵向 (注:这种方式 键盘不能旋转过来; iOS8.x下 UIAlterView旋转不过来  ) @return */ + (void)rotateOrientationPort ...

  5. touches, targetTouches, changedTouches 区别

    1. touches: A list of information for every finger currently touching the screen2. targetTouches: Li ...

  6. CRM域用户误删恢复

    记录一下: 不小心将CRM用户在域中删除了(CRM中未删除),直接新建一个同样账号的域用户然后尝试在CRM中登录报“invalid user”错误,一番检查发现从2011版本开始CRM中不单记录了用户 ...

  7. 几个opencv 的iOS的编译问题解决

    一个iOS项目需要用到opencv,而且要支持arm64的,以前有个demo的,只支持32位的.到官网下载了最新支持64位库,结果编译无法通过. google了好久也没法解决,后来问了一个同事,找出原 ...

  8. git ssh端口号变更之后所需要的修改

    假设原本的repository地址为:git@gitlab.cjx.com:jinxin/project2.git 端口变更之后,需要调整为:ssh://git@gitlab.cjx.com:PORT ...

  9. alhpa阶段回顾

    说明:本次课程,大家按照我下面列出来的问题进行回顾和反思,总结alhpa阶段以来的得失.每个组都要回答这些问题.由组长或者组员来回答都可以.目的依然是让大家养成软工的一些习惯和思维方式. 1.最初的需 ...

  10. [Docker] docker 基础学习笔记2(共6篇)

    febootstrap 是一个自制image的一个第三方的工具,好像他们现在都要用这个.   安装还是挺方便的. yum -y install febootstrap   febootstrap -i ...