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

springboot 将session存redis 有个疑问

springboot 将session存redis 有个疑问

12345678_0001 2019-03-13 18:15:02
现在有点疑问:我将session存到redis中, 经过测试同一台电脑用不同浏览器访问我的应用,会生成两套sessionID。。这样子怎么确定我账号当前是哪个session,主要是想实现避免用户重复登录的情况。
查看完整描述

7 回答

?
斯蒂芬大帝

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

两个浏览器代表两个不同的客户端,当然会有两个sessionId咯。
用户重复登录的问题可以通过注销上一个登录信息或者覆盖上一个登录的信息来解决。
由于http协议的无状态性,服务器是没法确定哪一个是你当前账号的session的...
-重新读了一遍问题,发现题主的意思应该是在服务器集群下如何使两个服务器辨别同一个用户才对,我觉得可以采用共同使用同一存储中心的方式来完成。恩,对于redis了解不多,希望有大神来指正,小的不才,说错勿怪。

查看完整回答
反对 回复 2019-04-19
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

"实现避免用户重复登录"是什么意思?

我们假设你有如下场景:

  1. 电脑A登录网站,因为cookie中没有任何信息,所以需要登录,登录后服务器端生成一个sessionID,并返回给前端,浏览器记入cookie,下次再开这个网页时,只要cookie没过期,就会把sessionID传给服务器,服务器凭此sessionID找到用户信息,然后告诉前端已经登录过了可以反问登录后的页面/信息。

  2. 电脑B在电脑A登录过之后,也去访问网站,然后因为cookie中没有任何信息,所以需要登录,登录后服务器端生成一个sessionID,并返回给前端,浏览器记入cookie。。。。一切如电脑A一样。没毛病

所以你的问题是?


查看完整回答
反对 回复 2019-04-19
?
holdtom

TA贡献1805条经验 获得超10个赞

spring security里面是通过用户名的hash值来判断是否是重复登录的,可以配置禁止登录还是踢出之前的登录。
就是实现一个过滤器在做登录验证的时候进行判断,可以参考security的实现方式。

查看完整回答
反对 回复 2019-04-19
?
三国纷争

TA贡献1804条经验 获得超7个赞

比如登陆的话, 你会自己保存一些用户信息到当前的session中,每次登陆的时候另开一条线程遍历所有的session,通过userInfo里面的某一字段进行查找(比如username),存在两条记录以上就删除的session即可.


查看完整回答
反对 回复 2019-04-19
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

用常规办法无法区分。
有人用flash本地通信的方式来解决此问题。

查看完整回答
反对 回复 2019-04-19
  • 7 回答
  • 0 关注
  • 1119 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号