【发布时间】: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