Java HttpSession 属性存储在哪里?

2022-09-02 01:24:35

对象是否序列化并发送给用户并在每个连接上发送回去(存储在cookie中)?

或者它们是否存储在服务器堆中,并且cookie只是一个非常小的标识符?

有关此主题的任何信息都会有所帮助。

谢谢


答案 1

你在第二个猜测中得到了它。

该 Cookie 包含一个 JSESSIONID。该 ID 用于在服务器维护的映射中查找用户的 HttpSession。至少这是最常见的方式。服务器可以实现这种更复杂的方法,但是在cookie中来回穿梭整个状态并不是其中之一。

这有一些影响。首先,如果服务器出现故障,您将失去会话状态。其次,如果您有一个服务器集群,则需要让用户每次都连接到同一台服务器,否则他们将在后续请求之间丢失会话。最后,如果有人找到一种方法来复制其他人的JSESSIONID并用它替换他们的JSESSIONID,会话劫持就成为可能。


答案 2

Cookie 只包含一个会话标识符(通常称为 )。服务器将此标识符映射到当前存储在用户会话中的任何数据。JSESSIONID

数据本身可以存储在内存中,也可以序列化为数据库或文件,具体取决于您使用的服务器及其配置。


推荐