Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpSession属性存储在哪里?_Java_Tomcat_Servlets_Cookies_Httpsession - Fatal编程技术网

Java HttpSession属性存储在哪里?

Java HttpSession属性存储在哪里?,java,tomcat,servlets,cookies,httpsession,Java,Tomcat,Servlets,Cookies,Httpsession,对象是否序列化并发送给用户并在每个连接上返回(存储在cookie中) 或者它们存储在服务器堆中,而cookie只是一个非常小的标识符 关于这个主题的任何信息都会很有帮助 谢谢你你猜对了 cookie包含一个JSESSIONID。该id用于在服务器维护的映射中查找用户的HttpSession。至少这是最常见的方式。服务器可以通过更复杂的方式实现这一点,但在cookie中来回传递整个状态并不是其中之一 这有一些含义。首先,如果服务器停机,您将失去会话状态。其次,如果您有一个服务器集群,则每次都需要让

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

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

关于这个主题的任何信息都会很有帮助


谢谢你

你猜对了

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


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

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


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

有什么安全的选择吗?你的最后一段并不完全准确。可以将流行的JavaWeb服务器(至少是Tomcat和JBoss)配置为将会话状态持久化到磁盘,以便在崩溃或服务器重新启动时保留会话状态。相同的服务器还支持在群集中的所有节点之间共享会话状态,这样用户就可以在不丢失会话的情况下命中群集中的任何节点(这样,如果某个群集节点发生故障,用户就可以继续与其他节点的会话,就好像什么都没有发生一样)。@aroth-你说得对。我的第二段提到了Tomcat中最常见的会话处理方式,特别是当它开箱即用时(可以这么说)。我提到了更复杂的可用系统,但并不认为这个问题需要深入研究持久/共享会话的所有复杂性。如果您查看原始问题,它所要求的只是澄清cookies在会话状态下的工作方式。我故意忽略了所有不同的可能性。相关: