Tomcat源码八:Session

版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在页面明显位置给出原文链接。 https://blog.csdn.net/mengxiangqihangz/article/details/89303877


对象模型
StandardService
StandardEngine
StandardHost
StandardContext
manager[StandardManager]
sessions[ConcurrentHashMap<String, Session>()]
session 属于 context,所以session作用域不跨 context, 即tomcat源码中的 sesion 不跨 examples、host-manager 等服务。
部署工程的时候,会在webapps下面生成 工程名字的文件夹,然后将工程部署到此文件夹下。
即:一个工程一个 context,各个工程之间的 session不通用。

首次SessionId的创建

JSESSIONID
在这里插入图片描述
这里表示为当前请求加入 Session管理
因此我们可以 指定每一个请求,是否加入 session管理
在这里插入图片描述
比如上面的,第一个为 此jsp的请求不加入 session管理
第二个为 此servlet的请求不加入session管理

创建Session流程 RequestFacade.getSession()

在这里插入图片描述

创建Session Request.getSession()

在这里插入图片描述

StandardManager的createSessions 方法

在这里插入图片描述

StandardSessionIdGenerator的 generateSessionId方法

在这里插入图片描述
在这里插入图片描述

找到请求对应的Session

如下,首先是请求的不同
第一张图片是 浏览器第一次发送请求,tomcat 读取到的数据
第二张图片是 浏览器第二次发送请求,tomcat读取到的数据,比第一次多了Cookie

我们知道这些数据都回封装到 request 中
在这里插入图片描述
在这里插入图片描述

解析cookie信息 CoyoteAdapter.postParseRequest()

解析有两处,

一个是通过 url解析 cookie。(当cookie被 浏览器禁用时,会将cookie信息重写进url)

postParseRequest
在这里插入图片描述

另一个是从 Cookie中解析出 sessionId,找到服务器中的Cookie

在这里插入图片描述
在这里插入图片描述

之前在FormAuthenticator 处有个 Session

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/mengxiangqihangz/article/details/89303877