baichengzhou / SpringMVC-Mybatis-Shiro-redis-0.2

基于SpringMVC、Mybatis、Redis、Freemarker的Shiro管理Demo源码的升级版。
http://www.sojson.com/shiro
1.79k stars 1.13k forks source link

同一浏览器登录多用户的问题 #24

Open zd906658355 opened 6 years ago

zd906658355 commented 6 years ago

在同一个浏览器中打开两个登录页面,先登录一个admin ,然后在登录一个用户,再去刷新admin的页面时,会发现已经变成了第二个登录的用户信息了,这个有没有什么好一点的办法解决一下呢

SunFireX commented 6 years ago

应该是用户信息存进cookie的原因,可以试试把用户信息存进session中试试

------------------ 原始邮件 ------------------ 发件人: "zd906658355"notifications@github.com; 发送时间: 2018年3月15日(星期四) 中午12:14 收件人: "baichengzhou/SpringMVC-Mybatis-Shiro-redis-0.2"SpringMVC-Mybatis-Shiro-redis-0.2@noreply.github.com; 抄送: "Subscribed"subscribed@noreply.github.com; 主题: [baichengzhou/SpringMVC-Mybatis-Shiro-redis-0.2] 同一浏览器登录多用户的问题 (#24)

在同一个浏览器中打开两个登录页面,先登录一个admin ,然后在登录一个用户,再去刷新admin的页面时,会发现已经变成了第二个登录的用户信息了,这个有没有什么好一点的办法解决一下呢

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

baichengzhou commented 6 years ago

基本不用解决吧。 WEB端应用都是这样。这个基本没什么好的办法,你随便试试淘宝、JD,Sina之类的,随意找个网站都可以,看是否实现了你说的需求!

@SunFireX 既然你说到了cookie,我就解释下,为什么不行。

都知道我们的Web应用交互是无状态的,也就是一个请求A开始到结束,到第二次A请求,其实服务端已经不认识这个A请求了。我们现在认识是为什么,是因为Session?Good,是的。那么我说下Session是怎么实现状态化的。

客户端请求--->服务端(服务端判断Cookie中是否有对应的SessionKey),如果有,用它去获取session,如果没有对应的SessionKey,或者没有获取到session,都会重新创建一个SessionKey,并且创建一个Session,保持KEY:Value的存储关系。 当第二次请求--->服务端(服务端判断Cookie中是否有对应的SessionKey)这个时候就能通过SessionKey获取到Session,从而就是有状态了。

SessionKey就是我们平时说的SessionID。 预知后事如何,请自行百度、Google Cookie And Session

baichengzhou commented 6 years ago

当然不是说解决不了,是没必要。另外真的要解决,我可以提供一下思路。当登陆后,重写SessionID,并且更新原来的session,sessionID最好是和用户一一对应。反正各种解决办法都与此类似!

zd906658355 commented 6 years ago

@baichengzhou 恩恩 我去试了一下京东的,好像也是这个样子. 看样子是我想的太多了 ,谢谢了

liuyueting commented 5 years ago

这个好像很正常吧,第一个cookie被第二个覆盖了啊