【问题标题】:Why differrent session ids are generated after logging out from multiple tabs?为什么从多个选项卡注销后会生成不同的会话 ID?
【发布时间】:2016-01-23 13:18:23
【问题描述】:

我在我的应用程序中使用 Spring 安全性。我刚刚遇到一个非常具体的问题。当我使用多个选项卡并且我按顺序从所有选项卡中注销时。每个页面都有新的 sessionid 值(fiddler 为每个登录页面请求显示新的会话 id)。这会导致问题,因为只有最新的登录页面有效,而所有其他页面都显示 sessionid 不匹配错误。

我该如何解决这个问题?

【问题讨论】:

  • @Lucas CSRF 令牌与 sessionid 不同。程序员,你能验证一下你指的是哪个吗?
  • @AviD 因为正文有多次 CSRF 令牌但没有会话 ID。所以我认为他的意思是 CSRF。

标签: java authentication spring-security csrf session-management


【解决方案1】:

当您注销时,服务器将终止您当前的会话,并创建一个新会话。这个新会话当然由不同的 sessionid 表示。

因此,当您第二次点击注销链接时,您会得到一个带有新 sessionid 的登录页面。

如果您随后刷新第一个选项卡,则在注销第二个选项卡后,您可能会拥有正确的 sessionid,并且能够从那里登录。

【讨论】:

  • 除了刷新页面没有别的办法了吗?我已经这样做了,但这似乎很尴尬。我想知道 google / SE 是如何处理这个问题的。
  • @aProgrammer 如果您确实指的是 sessionId,并且与 CSRF 无关(或者我错了吗?),还有其他方法可以解决它,例如无会话登录表单或 cookie-仅基于会话 ID。尽管您实际上可能在登录表单中放置了一个 CSRF 令牌,但这当然不适用于并行的 2 个选项卡,更不用说错误的会话了?
猜你喜欢
  • 2011-02-19
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
相关资源
最近更新 更多