单点登录系统在不同的服务器,如何共享session?

现在有一套单点登录系统。用户系统(user.xxx.cn)在一台服务器(IP:123.57.131.201),任务系统(task.xxx.cn)在另一台服务器(IP:123.57.211.231)。

两套系统的session都存放在各自的 /var/lib/php5目录下,也就是session是不能共享的。两套系统之间只靠cookie记住用户身份信息维系来正常运行。

一旦用户登录任务系统(task.xxx.cn)时没有选择记住密码,cookie就没有办法记录用户身份信息,任务系统(task.xxx.cn)就不能正常登陆了。

而我本地测试环境中两套系统在同一台服务器下,session是共享的,这种情况下即使cookie没有记录用户身份信息也可以正常登录。

所以我想有没有可能在两个服务器间共享session?

阅读 6.4k
5 个回答

可以多台服务器之间使用redis共享session,具体只需要在每台服务器上的php.ini中修改下面两个指令即可。

session.save_handler = redis
session.save_path = "tcp://redis地址:redis端口?auth=redis密码"

将session改为redis存储,这几台服务器直连redis获取session 就可以

你的问题可以描述为,在分布式的环境下,如何共享session.最简单的方案是用一些共享存储的方案,比如楼上说的redis,或者memcached.在整体负载不大或者机器数量不多的情况下,可以用这种方案。后续如果负载上去了,或者数量多了,可以考虑抽成一个独立的服务来做,服务本身内部可能会使用共享存储,或者切片存放session的方式。

推荐问题