【问题标题】:Session cookie not remove on browser close会话 cookie 不会在浏览器关闭时删除
【发布时间】:2015-07-03 11:49:54
【问题描述】:

对于 chrome 和 android 普通浏览器,即使在浏览器关闭时也不会删除 JSESSIONID cookie 参数。由于大多数网站都在使用具有会话过期时间的 JSESSIONID cookie 跟踪客户会话,因此即使浏览器关闭也不会从浏览器内存中删除。

因此,当我们再次访问该网页时,第一个请求是使用现有会话 cookie 值发送的。

如果应用程序与多个服务器一起运行以进行负载平衡,则请求始终发送到同一台服务器。有什么办法可以解决这个问题吗?

参考链接:Cookie issue

【问题讨论】:

  • 我编辑我的问题。如果在没有任何现有会话 cookie 的情况下发送请求,则会根据负载可用性随机选择服务器。如果使用现有会话 cookie 发送第一个请求,则不会发生这种情况。
  • 您使用哪种负载均衡器?也许可以以丢弃过期会话cookie的方式对其进行配置? ...我只是意识到遗憾的是,cookie 到期日期不是随 HTTP 请求一起发送的:-/
  • 这是最新的股票和 chrome 浏览器的安全问题。如果用户在未正确注销的情况下关闭网页或应用程序,则会暴露客户 jsessionId 并导致漏洞问题。为避免这种情况,我们试图在浏览器关闭时删除会话 cookie。其他浏览器会正确处理链接歌剧、野生动物园、火狐的问题。但在 chrome 浏览器中则不然。
  • 作为一项安全措施,我们可以在每次页面启动时手动删除 jsession ID。但理想情况下,不建议手动修改 jsession ID。对于上述问题,如果用户与一台服务器连接,则每次启动时都会建立相同的服务器连接。如果特定服务器关闭,则可能会对用户产生影响。作为安全漏洞和负载平衡的通用解决方案,会话 cookie 需要在浏览器关闭时清除。请提供任何通用的解决方案来实现这一点。
  • 我相信您正试图从错误的角度解决核心问题。您不能信任用户输入。带有会话 ID 的 cookie 是可以任意制作的用户输入。您的后端必须确保所有用户输入都符合您的预期标准。一个标准是会话 ID 不得过期。因此,与其试图让浏览器(用户客户端)丢弃过期的会话 cookie,不如您的后端必须丢弃过期的会话 data。如果您使用的是 JSP 技术,请阅读以下 SO 答案:stackoverflow.com/questions/14445024/…

标签: google-chrome cookies spring-security session-cookies android-browser


【解决方案1】:

由于这是最新浏览器中已知的安全漏洞,因此可以通过在每次启动应用程序时手动删除会话 cookie 来解决问题。

即使服务器已经处理了过期会话,与服务器的连接建立也需要根据每个服务器的负载可用性是动态的。由于服务器名称也存储在 cookie 中,即使浏览器/应用程序关闭,该值也不会被删除,因此每次应用程序启动时的第一个请求将连接到之前连接的同一服务器。

因此,由于未删除的 cookie,负载平衡会失败。

尽管这在技术上是可靠的解决方法,但我希望在即将推出的 chrome 浏览器版本中能够永久解决这个问题,类似于 safari/IE 浏览器。

如果有人找到永久解决方案,请也分享您的发现。

【讨论】:

    猜你喜欢
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 2018-02-25
    • 2013-01-09
    • 2012-09-02
    • 2011-03-07
    相关资源
    最近更新 更多