|
|
|
HttpSession (Tomcat)的实现机制??????
作者:holykeeper
发表时间:2005年01月27日 10:30
回复
原贴网址:
http://www.jdon.com/jivejdon/thread/18806.html
发帖前我已搜索过论坛: 有两个相关的主题: 关闭浏览器之后session是否就消失了 和 在WEB设计18条最重要的准则中,关于HTTPSESSION的疑问 大家可以参考参考
但我还是很迷惑:HttpSession的底层究竟是怎么实现的?也许有人说这是Web容器的责任,但我认为在一定程度上去了解底层的实现还是有益的。
先说说我的理解:一般会认为客户端在第一次访问Web容器时,容器会创建一个Session,这个Session被添加到一个Map 里,由容器负责维护。这个大家都很清楚,也很容易理解。但是关键是如何与客户端浏览器交换这个SessionId 的信息,很多书都提到有三种方式:cookie、URL重写、和隐藏表单,后两种是类似的。
如果是第一种,那么Sessionid被关联到一个浏览器一关闭就失效的cookie里,然后客户端浏览器每次用这个cookie来标示会话。注意这些都是Web容器替我们完成的。
如果是URL重写,则每个请求字符串后面会被附加如;jsessionid=XXXXXXXXX这样的标示,用于标示会话。
但让我困惑的是,容器采用了哪一种方法?或者说,容器何时决定使用哪一种方法?
我做了一个小实验,Web容器使用了Tomcat。在客户端与服务器进行会话时察看每次请求的cookie信息,但遗憾的是,并没有发现一个与会话相关的cookie存在。
接下来我察看了Tomcat的源代码,(只是粗粗看了看,或许没注意到),Tomcat在管理浏览器请求和会话时似乎也没有用到cookie来保存sessionid
最后我禁用了浏览器的cookie,在每次浏览器用超级链接或重定向时察看与他相关的sesssionid ,结果每次的sessionid值是不变的。
由此我认为,Tomcat在管理HttpSession时没有用到cookie的机制。
那么Tomcat是用了什么办法得知每次与他交互的是同一个浏览器呢?如果说是采用URL重写方法的话,我也没有注意到请求字符串后面多加了什么啊!
晕!
问题背景,在使用wap浏览器与Web容器进行交互时,因为wap浏览器不支持cookie,因此需要用URL重写的方法来维持会话id,由此我发现自己对HttpSession的内部机制还不是很清楚,想弄个明白,结果却越糊涂了。
Weblogic 的Web容器里提供的选项就比较多,可以选择是否启用cookie,是否启用URL重写。不过我没有实验过,不知道会出现什么情况。
|
|
Re: HttpSession (Tomcat)的实现机制??????
|
发表: 2005年01月31日 20:01
|
回复
|
|
|
|
这是一个很有意思的问题,我也没有深入研究,希望抛砖引玉:
根据我以前做容器的经验,httpSession是和客户端的IP地址及客户端软件有关。Cookie一般是和HttpSession无关的,使用Cookie+HttpSession的技术,可以实现自动登陆功能。
|
|
|
|
Re: HttpSession (Tomcat)的实现机制??????
|
发表: 2005年01月31日 20:47
|
回复
|
|
|
|
用到cookie维护的,不过你需要监听浏览器与tomcat的交互数据就有了 浏览器每次都发送Cookie属性给tomcat,而jsessionid生存周期只是浏览器周期,所以可能并没有存入cookie记录文件
|
|
|
|
Re: HttpSession (Tomcat)的实现机制??????
|
发表: 2005年01月31日 22:41
|
回复
|
|
|
|
|
我认为 Session Cookie 不同于一般的Cookie,在硬盘上并不存在,而是在IE进程的内存中。
|
|
|
|
Re: HttpSession (Tomcat)的实现机制??????
|
发表: 2005年02月01日 09:44
|
回复
|
|
|
|
sessionId 当用户首次访问服务器时,由容器自动创建。并存放在客户端浏览器的cache中保存。在服务器上有一个有个map,我们用serverMap来粗劣表示。severMap根据sessionid来维护每个session。 session里面也保存有一个map的实例(map)。 第一次创建session时,类似的操作: Httpsession session=request.getHttpSession(); serverMap.put(sessionId,session); session.set("abc","abcValue");//相当于map.put("abc","abcValue") client端每次访问浏览器,都会把sessionid带过去(透明的)。这样服务器就可以根据不同的sessionid找到各自的session。
上面是我个人看过一些资料的理解。如有不到之处,请各位大虾指出。我将不吝赐教。谢谢
|
|
|
|
Re: HttpSession (Tomcat)的实现机制??????
|
发表: 2005年02月01日 10:44
|
回复
|
|
|
|
|
其实session是通过cookie实现的,大家都用过apache的HttpClient吧,通过对客户机的cookie安全认证,确保与服务器的会话。
|
|
|
|
Re: HttpSession (Tomcat)的实现机制??????
|
发表: 2005年02月01日 16:35
|
回复
|
|
|
|
|
我对session还有个疑问:session的过期时间是怎么控制的?怎么样才能让session在过了指定时间后过期?
|
|
|
|
Re: HttpSession (Tomcat)的实现机制??????
|
发表: 2005年02月01日 23:36
|
回复
|
|
|
|
服务端记录每个sessionid的创建时间,每次调用session时会判断,如果过期,就清空session或重新分配一个sessionid,旧sessionid就死亡了
服务端与客户端Cookie的交互在http header用到SetCookie
|
|
|
|
Re: HttpSession (Tomcat)的实现机制??????
|
发表: 2005年02月02日 10:49
|
回复
|
|
|
|
|
|
|
|
Re: HttpSession (Tomcat)的实现机制??????
|
发表: 2005年02月02日 11:02
|
回复
|
|
|
|
|
补充一点,像JSSESSIONID这种Cookie称之为会话Cookie,和普通Cookie还是有区别的,IE里有一个选项“总是允许会话Cookie”就是指这类Cookie,当然会话Cookie的名称可以是其他名字,不一定是JSESSIONID。
|
|
|
|
Re: HttpSession (Tomcat)的实现机制??????
|
发表: 2005年02月03日 10:15
|
回复
|
|
|
|
介绍一篇文章
http://www.zhanglihai.com/article/2005-01-24/0G7CG6C0CR4C01C27G121CG0SU2PWLAF.xtp
Session详解
|
|
|
|
Re: HttpSession (Tomcat)的实现机制??????
|
发表: 2005年02月03日 11:52
|
回复
|
|
|
|
非常敬业专业的精神。
我原来以为:浏览器如果禁止了Cookie,服务器端就使用URL重写来维持状态。
jdon的论坛是在编程时手工代码使用了Cookie,以便使得用户能够关闭所有浏览器,或者说HttpSession失效后,能够自动登陆。
|
|
|
|
Re: HttpSession (Tomcat)的实现机制??????
|
发表: 2005年02月03日 12:33
|
回复
|
|
|
|
|
cook分成两种,一种存在于磁盘上,另一种存在于ie进程内
|
|
|
|
Re: HttpSession (Tomcat)的实现机制??????
|
发表: 2005年02月04日 16:51
|
回复
|
|
|
|
第一次发贴:错误之处请前辈多多指正! 我要说的是: 1:Session对象在浏览器中的有效范围: IE中: 1〉.Session对象只在建立Session对象的窗口中有效。 2〉.在建立Session对象的窗口中新开链接的窗口也有效。 Session只会在内存中,他会随着IE窗口的关闭而死亡。 也就是说单用seesion是不会有产生自动登入的效果的。 2:Cookie 是在服务器给客户端IE一个命令后在客户端产生并存的, 它可以存放用户信息,存到客户端硬盘上,在COOKIE记录被删除 或者失效日期之前,就可以实现自动登入的现象。 3:Session 和 Cookie 是不同的,但是他们确实是相关的。 当打开IE登入后,会向服务器发出一个指令请求SESSIONID以 及页面内容,服务器会返回页面内容和一个没有被使用的 SESSIONID让此IE使用,当时IE就对返回SESSIONID做存储;而当此IE再访问任何这个站点的JSP程序的时候,都会给服务器这个SESSIONID,来确认客户端的身份。(在没有Cookie 的情况下session死亡 SESSIONID被取消就需要重新登入) 4:可以通过客户端禁用和不禁用cookie来验证自己的说法。 ――――――――――――大家春节愉快阿 我回家过年了 --上车前发个烂贴 --希望前辈多指正。8
|
|
|
|
Re: HttpSession (Tomcat)的实现机制??????
|
发表: 2005年03月09日 11:18
|
回复
|
|
|
|
|
Session 和 Cookie的区别和相似点是什么?
|
|
|
|
这个主题共有 23 回复 / 2 页 [
1 2
下一页
]
| |
|
|
|
|