在使用shiro的session的时候感觉对于tomcat中session的管理还不是特别清楚,而且session管理作为tomcat中比较重要的一部分还是很有必要学习的。

目录

  • 概述
  • 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 — 八、tomcat中的session管理的更多相关文章

  1. Shiro权限管理框架(四):深入分析Shiro中的Session管理

    其实关于Shiro的一些学习笔记很早就该写了,因为懒癌和拖延症晚期一直没有落实,直到今天公司的一个项目碰到了在集群环境的单点登录频繁掉线的问题,为了解决这个问题,Shiro相关的文档和教程没少翻.最后 ...

  2. [转]tomcat中的session管理

    转载地址:http://blog.csdn.net/iloveqing/article/details/1544958 当一个sesson开始时,Servlet容器会创建一个HttpSession对象 ...

  3. 使用Tomcat-redis-session-manager来实现Tomcat集群部署中的Session共享

    一.工作中因为要使用到Tomcat集群部署,此时就涉及到了Session共享问题,主要有三种解决方案: 1.使用数据库来存储Session 2.使用Cookie来存储Session 3.使用Redis ...

  4. (八) Hibernate中的Session以及事务

    HibernateUtil.getSessionFactory().getCurrentSession() 和HibernateUtil.getSession() 的区别: 1.异:getCurren ...

  5. How Tomcat Works(十二)

    tomcat容器通过一个称为Session管理器的组件来管理建立的Session对象,该组件由org.apache.catalina.Manager接口表示:Session管理器必须与一个Contex ...

  6. Tomcat的Session管理机制

    >>Session和Cookie请求的过程 Http连接本身是无状态的,即前一次发起的连接跟后一次没有任何关系,是属于两次独立的连接请求,但是互联网访问基本上都是需要有状态的,即服务器需要 ...

  7. Tomcat源码分析——Session管理分析(上)

    前言 对于广大java开发者而已,对于J2EE规范中的Session应该并不陌生,我们可以使用Session管理用户的会话信息,最常见的就是拿Session用来存放用户登录.身份.权限及状态等信息.对 ...

  8. 微服务架构下分布式Session管理

    转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:“加群 姓名 公司 职位 微信号”. 一.应用架构变 ...

  9. TOMCAT8源码分析——SESSION管理分析(上)

    前言 对于广大java开发者而已,对于J2EE规范中的Session应该并不陌生,我们可以使用Session管理用户的会话信息,最常见的就是拿Session用来存放用户登录.身份.权限及状态等信息.对 ...

随机推荐

  1. snmp switch traffic交换机带宽

    上代码 <?php function getstr1($strall,$str1,$str2,$html_charset='utf-8'){ $i1=mb_strpos($strall,$str ...

  2. ue4 SNew补遗

    上一篇分析了SNew背后的实现,但是有一个关键问题遗漏了,那就是: #define SNew( WidgetType, ... ) \ MakeTDecl<WidgetType>( #Wi ...

  3. Python学习之正则表达式

    引用类: import re 常用方法: re.compile(pattern) re.match() re.search() re.findall() group() groups() re.spl ...

  4. hdu 1003

    Max Sum Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  5. 10个经典的C语言面试基础算法及代码

    10个经典的C语言面试基础算法及代码作者:码农网 – 小峰 原文地址:http://www.codeceo.com/article/10-c-interview-algorithm.html 算法是一 ...

  6. centos下安装iftop

    CentOS 下iftop 的安装 安装方法一:编译安装(安装成功) wget http://ex-parrot.com/~pdw/iftop/download/iftop-0.17pre3.tar. ...

  7. 斯坦福第十九课:总结(Conclusion)

    19.1  总结和致谢 欢迎来到<机器学习>课的最后一段视频.我们已经一起学习很长一段时间了.在最后视频中,我想快速地回顾一下这门课的主要内容,然后简单说几句想说的话. 作为这门课的结束时 ...

  8. Hibernate Tools for Eclips Plugins

    1. 安装: Help -> Install new software -> Add ->Achieve -> 找到安装包 -> OK 2. 创建映射:

  9. WebSphere试用过期问题处理

    WebSphere Application Server的试用期为60天,过期将无法启动WAS. E:\IBM\WebSphere\AppServer\profiles\Dmgr01\bin>s ...

  10. 安装xubuntu时遇到的一些问题

    1  下载地址 http://www.linuxdown.net/ 2  选择虚拟机 VirtualBox 3  安装步骤 http://www.cnblogs.com/zhcncn/p/398730 ...