【发布时间】:2013-01-22 07:32:23
【问题描述】:
我的流程:
- 在 browser1 (session1) 中为 User1 启动会话
- 在 browser2 (session2) 中以 User1 身份登录
- 在 browser1 中刷新页面 - 显示错误: '此会话已过期(可能是由于同一用户同时尝试多次登录)
- 再次刷新 browser1 中的页面 - 旧会话成功恢复
我怎样才能结束 session1?
我的弹簧配置:
<session-management session-fixation-protection="migrateSession">
<concurrency-control max-sessions="1" error-if-maximum-exceeded="false"/>
</session-management>
【问题讨论】:
-
5.在 browser2 中刷新页面 - 您会看到显示错误:'This session has been expired' 这就是它的工作原理,查看替代解决方案将
error-if-maximum-exceeded设置为true直到您在 browser1 中的会话过期将无法在 browser2 上登录。 -
但是如果我想允许再登录一次,但破坏之前的登录会话?有可能吗?
-
有可能,事实上就是这样——当你执行4.时,浏览器1中会创建一个new会话。跨度>
-
是的,但实际上它并没有被破坏,因为你可以刷新页面并且会话会恢复,这对我来说不合适
-
会话将不恢复,new将创建一个。这和上面描述的场景是一样的:在2.中,当你登录browser2并创建session2时,session1被标记为过期。然后当你再次登录browser1时,你会得到关于无效(过期)会话的信息,但是在刷新browser1之后,session2被标记为过期,并且在browser1中创建了session3。你可以重复这个过程,这就是它的工作原理。
标签: java spring spring-security