gpt4 book ai didi

java - 对于每个新客户端,tomcat 不会创建新的 session ID,而是使用 getSession() 方法创建其他客户端使用的旧 session ID

转载 作者:行者123 更新时间:2023-12-01 11:32:11 24 4
gpt4 key购买 nike

每当客户端打开新的 Web 浏览器时,该客户端就会被 tomcat 容器 视为新客户端,并且 getSession(true) 会返回该客户端的新 session ID。

如果客户端打开 5 个网络浏览器,则容器会创建 5 个唯一 session ID,但在我的情况下,getSession(true) 方法返回每个新客户端的旧 session ID。

例如,如果我为客户端一调用 getSession() 方法,然后容器为客户端一生成 B0B7945E63D00701E19FA6E9A4909B07 session ID,当第二个客户端到来时,我再次调用 getSession() 方法,但这次 getSession() 方法返回为客户端生成的旧 session ID。

因此,我在客户端 1 的 session ID 中设置的数据也会反射(reflect)到客户端 2,如果有 5 个或更多客户端到来,则 getSession() 将返回为客户端生成的旧 session ID一对一所有客户。

最佳答案

默认配置是在服务器和浏览器之间通过 cookie 交换 session ID。因为 HTTP 本质上是一个非连接协议(protocol),而 session 只是一个丑陋的(*)黑客来模拟连接。

如果一个客户端(机器)打开 5 个浏览器应用程序或同一浏览器的窗口,所有这些都将共享相同的 cookie 包...并且还将共享相同的 session !有人告诉我,最近的一些浏览器实际上试图解决这个问题,但我从未测试过它。

当我必须在一台机器上测试不同的 session 时,我使用 Firefox、IE 和 Chrome 来拥有不同的 cookie 包。

(*) 丑陋只是我的观点,但事实是服务器无法可靠地知道客户端是否关闭了浏览器,并且您必须使用复杂的模式来避免 session 劫持(好吧安全框架可以为您做到这一点,只要您要求他们)

关于java - 对于每个新客户端,tomcat 不会创建新的 session ID,而是使用 getSession() 方法创建其他客户端使用的旧 session ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30304416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com