当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识- 称为sessionID,如果已包含一个sessionID则说明以前已经为此客户端创建过session,服务器就按照sessionID把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含sessionID,则为此客户端创建一个sessionID并且生成一个与此session相关联的sessionID。sessionID的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionID将被在本次响应中返回给客户端保存。保存sessionID的方式可以采用cookie,从而在交互过程中浏览器可以自动地按照规则把这个标识发送给服务器。
在打开浏览器第一次发送请求的时候,服务器会自动为其创建一个session,并赋予其一个sessionID,发送给客户端的浏览器。客户端再次请求服务器中其他资源的时候,会自动在请求头Request Header上添加:Cookie: JSESSIONID=客户端第一次拿到的session ID
,服务器接收到请求后,会在内存中根据该JSESSIONID寻找上次使用的session对象。
一般情况下,session都是存储在内存里,当服务器进程被停止或者重启的时候,内存里的session也会被清空,如果设置了session的持久化特性,服务器就会把session保存到硬盘上,当服务器进程重新启动时这些信息将能够被再次使用。持久化方式包括文件、数据库、客户端cookie保存和复制。
原文地址:https://www.cnblogs.com/Winkelzyx/p/12291555.html