Tomcat的session
来源:互联网 发布:linux tomcat debug 编辑:程序博客网 时间:2024/05/18 00:23
创建session
在具体说明session的创建过程之前,先看一下BS访问模型:
- browser发送Http request;
- tomcat内核Http11Processor会从HTTP request中解析出“jsessionid”(具体的解析过程为先从request的URL中解析,这是为了有的浏览器把cookie功能禁止后,将URL重写考虑的,如果解析不出来,再从cookie中解析相应的jsessionid),解析完后封装成一个request对象(当然还有其他的http header);
- servlet中获取session,其过程是根据刚才解析得到的jsessionid(如果有的话),从session池(session maps)中获取相应的session对象;这个地方有个逻辑,就是如果jsessionid为空的话(或者没有其对应的session对象,或者有session对象,但此对象已经过期超时),可以选择创建一个session,或者不创建;
- 如果创建新session,则将session放入session池中,同时将与其相对应的jsessionid写入cookie通过Http response header的方式发送给browser,然后重复第一步。
(Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密))
以上是session的获取及创建过程。在servlet中获取session,通常是调用request的getSession方法。
服务器端是怎么判断会话过期的呢?原理服务器会启动一个线程,一直查询所有的Session对象,检查不活动的时间是否超过设定值,如果超过就将其删除。
Session会话信息不会一直在服务器端保存,超过一定的时间期限就会被删除,这个时间期限可以在 web.xml中进行设置,不设置的话会有一个默认值,Tomcat的默认值是60.
(可以将PHPSESSID包含在http请求的url中,就像下面的例子一样:
GET /index.php?PHPSESSID=12345 HTTP/1.1
Host: example.org
以这种方式传递session id的话,可以跟用cookie头部传递session id一样,达到同样的效果, 但是,缺点就是需要开发者人为地将session id附加在url中或者作为隐藏字段加入到表单中。不像cookie一样,只要服务器端指示客户端创建cookie成功以后,客户端在后续的请求中,会自动第将对应的没有过期的cookie传递给服务器端。)当从HTTP服务器请求URL时,浏览器将该URL与客户主机中的存储的所有cookie比较,如果发现匹配cookie,所有匹配cookie中包含名字/值对的那一行将被包含在HTTP请求头。
sessions是一个ConcurrentHashMap<String, Session>对象
如果客户机禁止Cookie的话,Session也不能使用,但是对于JSP来说(.NET不熟悉),会使用URL重写的技术,在URL里面附加
上SessionID,从而实现用户身份的标识
里面的manager.findSession(requestSessionId)用于查找此会话ID对应的session对象。Tomcat实现
是通过一个HashMap实现
Session本身也是实现为一个HashMap,因为Session设计为存放key-value键值对,Tomcat里面Session实现类是StandardSession,里面一个attributes属性:
private HashMap attributes = new HashMap();
所有会话信息的存取都是通过这个属性来实现的。Session会话信息不会一直在服务器端保存,超过一定的时间期限就会被删除,这个时间期限可以在web.xml中进行设置,不设置的话会有一个默认值,Tomcat的默认值是60。那么服务器端是怎么判断会话过期的呢?原理服务器会启动一个线程,一直查询所有的Session对象,检查不活动的时间是否超过设定值,如果超过就将其删除。见StandardManager类,它实现了Runnable接口,里面的run方法如下:
- Tomcat Session的管理
- Tomcat 的session管理
- Tomcat的Session管理
- Tomcat的session
- tomcat的session共享
- tomcat的session原理
- tomcat的session冲突
- Tomcat的Session管理
- tomcat 下的session 管理
- 探究Tomcat的session操作
- Tomcat中session的管理机制
- Tomcat中session的管理机制
- memcached 共享tomcat的session
- tomcat之Session的管理
- Tomcat中session的管理机制
- Tomcat 服务器 Session的实现
- Tomcat的session管理探究
- Tomcat的Session管理(一)
- 解决 Mybatis 元素类型为 "resultMap" 的内容必须匹配 "(constructor?,id*,result*,association*,collection*,discriminat
- java垃圾回收机制
- jQuery炫酷3D翻页式电子时钟特效
- 使用 Apache Lucene 搜索文本
- c++词汇表
- Tomcat的session
- 第五周程序阅读(3)
- generator 工具的使用
- C变量的直接引用与间接引用区别
- main函数中的两个参数
- 立体匹配算法
- <C++>istringstream, ostringstream, stringstream的用法
- 欢迎使用CSDN-markdown编辑器
- IOS SDK详解之拍照/相册(默认+自定义拍照界面)