java - springboot 将session存redis 有个疑问
黄舟
黄舟 2017-04-18 09:07:21
[Java讨论组]

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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(7)
阿神

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

阿神

一个用户只有一个sessionId,用户第一次访问,服务端生成sessionId,放在http header中传给前端,前端会把这个sessionId存在用户本地,也就是cookie,以后前后端交互的时候都需要传递cookie来确定用户的身份。

PHP中文网

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

我们假设你有如下场景:

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

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

所以你的问题是?

阿神

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

伊谢尔伦

同一台电脑不同浏览器登录cookie也会不同.

天蓬老师

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

迷茫

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号