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