php的cookie和session相同主域名共享

摘要:
如何使用chrome查看cookie和session详见另一篇文章,点这里首先说cookie,$cookieDomain='.elf.com';setcookie;如上代码设置的cookie,在主域名为elf.com的所有二级域名下都能访问该cookie。由于上面已经说了能共享cookie,如果login把自己的sessionid存放在主域名的cookie里,bbs域名就能通过cookie拿到login服务器的sessionid了。bbs服务器还需要一条配置:$cookieDomain='.elf.com';session_set_cookie_params;这个必须放在session_start()前面!!!同理,其他服务器要使用login的session都必须添加这个配置,而且要传入login服务器的sessionid。测试的时候记得清cookie!!!

如何使用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()+300, '/', $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(0, '/', $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(0, '/', $cookieDomain);
session_start();
$shareSid = isset($_COOKIE['elf_PHPSESSIONID']) ? $_COOKIE['elf_PHPSESSIONID'] : '';
if(empty($shareSid)) {
    $shareSid =session_id();
    setcookie('elf_PHPSESSIONID', $shareSid, time()+300 ,'/', $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(0, '/', $cookieDomain);
session_start();
$shareSid = isset($_COOKIE['elf_PHPSESSIONID']) ? $_COOKIE['elf_PHPSESSIONID'] : '';
if(empty($shareSid)) {
    $shareSid =session_id();
    setcookie('elf_PHPSESSIONID', $shareSid, time()+300 ,'/', $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相同主域名共享》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇svm支持向量机系列(4) --软间隔支持向量机BI-LSTM-CRF在序列标注中的应用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

一次library cache pin故障的解决过程

在dbsnake 上看到的这篇文章,转过来。 主要还是学习解决问题的一个思路。这个往往比问题的解决更重要。 原文链接如下: http://dbsnake.com/2010/06/solve-library-cache-pin.html 内容如下: 今天接到同事的电话,说他的一个存储过程已经run了一个多小时了,还在继续run,他觉得极不正常,按道理说不应该...

linux ------ 使用 screen 后 SSH 断开后程序依旧能在后台运行

为什么ssh断开后你运行的进程会退出呢? 因为所有进程都得有个父进程。当你ssh到一个服务器上时,打开的shell就是你所有执行命令的父进程。 当你断开ssh连接时,你的命令的父进程就没了。如果处理不当,这些进程就会收到SIGTERM信号,全被干掉了。 然后说解决方案: 让你运行的进程的父进程变成PID=1的init进程,这样你的shell退出后不影响这...

php持续集成环境笔记

记录下php集成环境中若干个工具的安装步骤和过程: 安装pear wget http://pear.php.net/go-pear.phar $ php go-pear.phar 使用:pear install <要安装的pear程序包> 安装phpunit pear channel-discover pear.phpunit.de p...

Ucenter后台登陆 验证码CCCC的解决方法 无法登录解决办法

做同步登录的时候,偶然发现ucenter登录的时候,验证码总是CCCC,太郁闷了,网上找了一下,听说Discuz也有这个问题,不过Discuz的比较好解决,把config.inc.php里面的chekip关掉就可以登陆了, $admincp['checkip'] = 0; // 后台管理操作是否验证管理员的 IP, 1=是[安全], 0=否。仅在管理员无法...

ASP.NET基础知识整理

Asp.net六大对象 1.Request-->读取客户端在Web请求期间发送的值 常用方法: 1、Request.UrlReferrer请求的来源,可以根据这个判断从百度搜的哪个关键词、防下载盗链、防图片盗链,可以伪造(比如迅雷)。 (使用全局一般处理程序) 2、Request.UserHostAddress获得访问者的IP地址 3、Reque...

php变量和字符串连接符——点

连接符——点,本身也是一种运算符。它真正的名字应该叫“字符运算符”。作用是把两个字符串连接起来。 echo 字符 . 变量 . 字符;  //点号把三个值连接成为一个,运行正常。 例: 1.字符串+变量+字符串 echo("<!--".$result."-->"); 2.变量+变量echo($result.$result); 3.字符串+变量...