为什么要实现共享session

需要实现共享session的原因就在于,多个网站要使用同一份session数据,例如保存用户登录状态的session
相关文章:
java:
https://www.cnblogs.com/SimpleWu/p/10118674.html

PHP使用Redis实现Session共享:
https://segmentfault.com/a/1190000019138919

PHP 实现多网站共享用户SESSION 数据解决方案:
https://blog.csdn.net/u013160024/article/details/47037445

PHP实现跨服务器session共享的方法教程:
https://www.cnblogs.com/furuihua/p/11468610.html

需要共用session数据的场景有哪些?
1、当服务器使用了负载均衡,多台服务器使用的都是同一套网站的代码,用户请求网站时,请求被分发到不同的服务器上。这种情况下,用户第一次请求时,在a服务器生成了sessionid,但在b服务器和c服务器并没有生成sessoinid,此时就会导致用户的登录状态出现问题,各服务器之间不能保持一致

2、当多个网站同一个服务器需要用同一个sessoinid来获取用户的登录状态时

sessoin共享的实现
session共享的情况有以下几种:

1、同服务器同域名(子域名不同):
如:a.baidu.com b.baidu.com c.baidu.com

2、同服务器不同域名
如 abc.now.com uj.after.com
3、不同服务器不同域名

第一种情况可以这样设置(如有侵权,请联系删除)
session.domain
第二种情况和第三种情况比较类似,都需要做到sessionid共享和数据共享

sessionid共享可以通过跨域设置cookie来实现,如在a站登录时,设置b站的sessionid,并把sessionid当做key存入redis中,b站再通过该sessionid获取到共用的数据。但这种方式存在一种情况,就是当跨域设置b站的cookie失败时比较麻烦,因为在a站中是通过<script src="http://a.com"></script>这种方式来设置b站的cookie的

数据共享可以通过将数据保存在redis、memcached、数据库来实现

session服务器共享

这个问题和cookie的跨域类似,面试的时候也很爱聊这个问题。

以前在做服务器集群的时候会碰到这样的一样问题,就是用户一会访问是处于正常登录状态,一会访问又没有登录了。这个问题偶尔才会出现。跟踪代码下去才发现session没有取到相应的值,想想也是醉了:原来服务器session没有设置共享,session存在在本地文件目录,当用户访问另外一台服务器的时候自然就取不到session了。

解决方法也不难,通过共享的存储在进行服务器之间的共享。这里使用redis的进行session存储。可以通过php.ini配置文件进行调整,也可以在代码中通过ini_set进行调整

ini_set("session.save_handler", "redis");
ini_set("session.save_path", "tcp://127.0.0.1:6379”);

如果需要使用redis进行存储,需要session中的Registered save handlers支持redis
在这里插入图片描述
php中session是否支持redis

当这样设置之后,session就会保存在redis中了,不同的集群服务器之间就可以通过该redis服务器进行共享了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值