为了账号安全,请及时绑定邮箱和手机立即绑定

thinkphp3.2如何多域名共享session

thinkphp3.2如何多域名共享session

凤凰求蛊 2018-12-31 01:00:01
thinkphp3.2如何多域名共享session
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

要实现多域名共享session,首先就得了解SESSION的运行机制。基本概念我就不说了。
session是这样运行的:
用户A访问站点Y,如果站点Y执行了session_start();(以下假定session_start()总是存在)那么会产生一个 session_id,这个session id一般会以COOKIE的形式保存到用户A(我们可以通过在php.ini里设置session.use_only_cookies为1,强制SESSION ID必须以COOKIE传递。)。这时候SESSION ID表现为$_COOKIE[’PHPSESSID’];(PHPSESSID可用session_name()函数来修改)
用户A接着访问,这个session id($_COOKIE[’PHPSESSID’])就会在A每次访问Y的时候传送到站点Y。
在站点Y上,会有这么一个目录,是用来保存SESSION的实际数据的。站点Y接收到session id,然后通过session id,来获得与SESSION数据的关联,并返回SESSION数据。
可能聪明的你已经想到了,既然服务器端和客户端之间的SESSION是通过一个SESSION ID来联系,并且SESSION数据是以普通文件的形式保存在一个特定的文件夹里。
那么我们要实现不同域名,只需要满足以下两个条件:
[color=Red]1)不同域名的SESSION数据目录统一到一起,或者同步更新。
2)对同一个客户,使用统一的一个SESSION ID [/color]
[color=Green]第一个条件的实现。
如果是同一台服务器,就不需要进行任何设置了。
如果是集群/分布式的,那么我想也不需要我来说了。。能做分布式应用的,在目录共享方面的经验应该比我丰富。我也没有进行过多服务器的测试,主客观条件的原因都有。
我在这里主要是想说一下第二个条件――使不同的域名,拥有统一的SESSION ID。
那我们应该怎么统一呢?
首先必须在不同域名之间传递这个SESSION ID,且由于 cookie必须是针对域名的,所以传递动作是由客户端来完成。如果传递过程不是由客户端来完成,那么接受传递的域名就不知道针对的是哪个客户。
其次就是修改接受传递的域名下的SESSION ID。[/color]
---------------------


查看完整回答
反对 回复 2019-01-16
  • 1 回答
  • 0 关注
  • 1415 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信