How Tomcat works — 八、tomcat中的session管理
2018-02-28 09:05
323 查看
在使用shiro的session的时候感觉对于tomcat中session的管理还不是特别清楚,而且session管理作为tomcat中比较重要的一部分还是很有必要学习的。
session的作用
session新建、查找和更新
session删除
总结
在用户servlet中使用的session为StandardSessionFacade(也是使用了facade模式,类似request),类关系如下:
非红框圈住的部分是session新建的过程,在request.addSessionIdInternal方法中将session作为cokkie设置到response头信息中,浏览器中收到"set-cookie"头信息的时候会将该头信息的值设置到cookie中,下次请求的时候会带上。
调用过程如上图中左上方的红框。
在新的请求来的时候,如果查找到对应的session了会验证session是否可用(过期),如果过期了就会删除该session
在daemon线程(ContainerBase$ContainerBackgroundProcessor.processChildren中StandardContext->ContainerBase.backgroundProcess中调用StandardManager->ManagerBase.backgroundProcess)中定时检查是否过期,如果 过期则删除。
这段时间来的图(使用astah绘制)和笔记
http://pan.baidu.com/s/1dF2sGpj
目录
概述session的作用
session新建、查找和更新
session删除
总结
概述
在tomcatsession管理的类标准实现为StandardManager,主要作用为启动的是加载缓存的session,类关系如下:在用户servlet中使用的session为StandardSessionFacade(也是使用了facade模式,类似request),类关系如下:
session的作用
因为http协议是无状态的,但是在实际使用中我们需要知道上次请求保存在服务器端的数据,这个时候就用到了session,结合客户端的cookie就可以实现暂时在服务器端存储部分数据。但是注意,cookie并不是仅仅为了配合session而存在,cookie主要用来客户端来存储一些数据。和普通cookie不一样的地方是,和session相关的cookie 是由服务器端返回给浏览器,由浏览器自动设置的,不需要开发人员参与。session新建、查找和更新
session新建
因为在一次请求中session不是必要的,所以tomcat 不是一定会创建session,只有在使用到了才会创建新的session,比如在UserServlet中使用到了session,创建过程如下:非红框圈住的部分是session新建的过程,在request.addSessionIdInternal方法中将session作为cokkie设置到response头信息中,浏览器中收到"set-cookie"头信息的时候会将该头信息的值设置到cookie中,下次请求的时候会带上。
session查找
当同一个客户端在有效时间内(默认是30分钟,也是session的默认过期时间)第二次请求来了的时候,在CoyoteAdapter.postParseRequest方法内解析request请求头信息获取cookie(如果有的话),然后将cookie作为sessionId(其实cookie就是sessionId)设置到request对象中,在servlet 中调用getSession的时候,如果根据该sessionId查找到了session,则不会新建,否则才会新建。调用过程如上图中左上方的红框。
session更新
因为session有过期时间,tomcat会记录该session的lastAccessedTime,更新session也就是更新这个时间,调用过程如上图中最下面的红框。session删除
默认session是有过期时间,而且保存在内存中的,如果,一直不删除session,最后肯定会撑爆内存,在tomcat 中删除session的情况有两种:在新的请求来的时候,如果查找到对应的session了会验证session是否可用(过期),如果过期了就会删除该session
在daemon线程(ContainerBase$ContainerBackgroundProcessor.processChildren中StandardContext->ContainerBase.backgroundProcess中调用StandardManager->ManagerBase.backgroundProcess)中定时检查是否过期,如果 过期则删除。
总结
到这里tomcat源码阅读基本上已经完成,大体脉络已经很明确,收获颇多,第一次阅读源码确实感觉到了一个好的开源项目的强大之处。这段时间来的图(使用astah绘制)和笔记
http://pan.baidu.com/s/1dF2sGpj
相关文章推荐
- 探索《How Tomcat Works》心得 七 Session
- How tomcat works——20 基于JMX的管理
- How tomcat works——19 管理Servlet
- how tomcat works(第19章:管理Servlet)
- how tomcat works(第19章:管理Servlet)
- 攻城狮在路上(肆)How tomcat works(零) 前言说明
- How Tomcat Works(十二)
- How Tomcat works 之第九章 BootStrap类
- How tomcat works 之第十一章之 FilterDef
- How Tomcat Works之第十二章之invoke方法
- How Tomcat Works之ex01时序图
- 【How Tomcat Works】深入剖析Tomcat——引言
- Tomcat的Session管理机制
- Tomcat源码学习(4)-How Tomcat works(转)
- 《How Tomcat Works》读书笔记(一)
- How tomcat works 读书笔记十三 Host和Engine
- how tomcat works(第六章)
- HowTomcatWorks学习笔记--一个简单的Web容器
- how tomcat works(第九章)
- How tomcat works 读书笔记十四 服务器组件和服务组件