比如A用户登录后不注销,直接B用户登录,sessionId 是一样,而且A可以访问B的权限内容,B可以访问C的权限内容。求解
注销的时候清除下session
((HttpSession) sc.getAttribute(userName)).invalidate();// 清除第一次登陆的session
就是没有注销啊!我老大说业务的那些人,两个账号就直接一起登录了 谁给你注销啊!所以说注销的功能并没有实现 ,但是sessionID 又是一样的 造成混乱,权限都不能用了。
注销的功能我写了 但是他们不会用啊。只会说功能没实现啊
@帝丶殇: 那就登录的时候先调用注销的方法,然后在进行登录的操作!
@刘宏玺: 我想过这个,但是另一个不就被我清了。感觉换汤不换药啊。
@帝丶殇: 没有换汤不换药啊,这样就可以控制住用户是最近一次登录的用户的权限了
@刘宏玺: 实在不行的话 才会用这个。已经烦了两天了,毕竟这样写的话那边就被我清掉了,清掉后那边就相当于关闭了啊!我现在想实现两个在一台电脑一个浏览器同时登录 而且互不干扰
@帝丶殇: 使用两个不同内核的浏览器就实现了!
@刘宏玺: 就是要用一个浏览器啊!两个浏览器 压根就没问题啊!所以我快疯了
@帝丶殇: 那你就建立一个包含所有权限的用户不就完事了!
@刘宏玺: 你的普通用户能够比管理员的权限还多吗?而且现在权限混乱了,拦截器都不起作用,随意访问了
SessionID一样?
是的 我最开始是用的shiro的session 后来普通用户用HttpSession 管理员用shiro session 但是sessionID却是一样的
说明这个问题之前先举个可以辩证的生活中的例子:
你用qq1234登录tencent游戏官网,然后打开lol官网,再打开cf官网,然后再cf官网注销登录lol官网,你再回到lol官网你会发现什么?session重置。
以上是一个很好的session的解决方案。
但是也一些网站做的不好导致session混乱。
这可以理解为是session的一个bug,也可以理解为程序员对session使用的错误。
所以,登录过程要有一个session清空的过程。
你是说我他登录的时候判断他是否登录过,然后清除下,再登录,是这个意思吗