浏览 3939 次
锁定老帖子 主题:Tomcat session 实现
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-09-29
Tomcat是借助cookie来实现session管理的,如果客户端没有禁用cookie,就借助cookie来实现session. 当客户端禁用cookie时,浏览器还有一个会话级cookie jsessionid(被IE缓存在内存中),服务器端就使用URL重写来维持状态,其实我觉的还是在利用cookie,只不过这个cookie是缓存在内存中的. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-09-29
理解错误! |
|
返回顶楼 | |
发表时间:2006-09-29
sizhefang 写道 今天思考了一下Tomcat的session的实现方式的问题,得出一点自己的结论,不知正确与否,敬请各位指教.
Tomcat是借助cookie来实现session管理的,如果客户端没有禁用cookie,就借助cookie来实现session. 当客户端禁用cookie时,浏览器还有一个会话级cookie jsessionid(被IE缓存在内存中),服务器端就使用URL重写来维持状态,其实我觉的还是在利用cookie,只不过这个cookie是缓存在内存中的. 当浏览器禁止cookie,是不可能有会话级cookie的(被ie缓存在内存中),url重写,与cookie无关。请搜索布娃娃有关httpsession的牛贴。 |
|
返回顶楼 | |
发表时间:2006-09-29
URL Rewriting是在所有的URL后面,加个jsessionid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
(在Tomcat里是这样,别的AppServer原理也差不多。) |
|
返回顶楼 | |
发表时间:2006-09-29
balaschen 写道 sizhefang 写道 今天思考了一下Tomcat的session的实现方式的问题,得出一点自己的结论,不知正确与否,敬请各位指教.
Tomcat是借助cookie来实现session管理的,如果客户端没有禁用cookie,就借助cookie来实现session. 当客户端禁用cookie时,浏览器还有一个会话级cookie jsessionid(被IE缓存在内存中),服务器端就使用URL重写来维持状态,其实我觉的还是在利用cookie,只不过这个cookie是缓存在内存中的. 当浏览器禁止cookie,是不可能有会话级cookie的(被ie缓存在内存中),url重写,与cookie无关。请搜索布娃娃有关httpsession的牛贴。 小弟不材,还有问题请教: 1.IE里面的设置禁掉cookie是可以允许会话cookie存在的,为什么您说当浏览器禁止cookie,是不可能有会话级cookie的 2.url重写是在url后面加上sessionid的值,是不是我在一个浏览器里面点任何连接或form提交时地址栏里面的jsessionid都是相同的值,因为只有这个值相等,服务器端才能维持与客户端的会话. |
|
返回顶楼 | |
发表时间:2006-09-30
sizhefang 写道 1.IE里面的设置禁掉cookie是可以允许会话cookie存在的,为什么您说当浏览器禁止cookie,是不可能有会话级cookie的
用户可以设置连会话cookie都禁止掉。 sizhefang 写道 2.url重写是在url后面加上sessionid的值,是不是我在一个浏览器里面点任何连接或form提交时地址栏里面的jsessionid都是相同的值,因为只有这个值相等,服务器端才能维持与客户端的会话.
对。 对所有的连接和form action都要做点工作 <form action="<%=response.encodeURL(contextPath + "/servlet/blabal.do")%>" method="post"> <a href="<%=response.encodeURL(contextPath + "/servlet/blabla.do")%>" Servlet Container会自动识别cookie是否禁止掉,如果禁止了就会在所有的url后面加jsessionid |
|
返回顶楼 | |
发表时间:2006-09-30
bigpanda 写道 sizhefang 写道 1.IE里面的设置禁掉cookie是可以允许会话cookie存在的,为什么您说当浏览器禁止cookie,是不可能有会话级cookie的
用户可以设置连会话cookie都禁止掉。 sizhefang 写道 2.url重写是在url后面加上sessionid的值,是不是我在一个浏览器里面点任何连接或form提交时地址栏里面的jsessionid都是相同的值,因为只有这个值相等,服务器端才能维持与客户端的会话.
对。 对所有的连接和form action都要做点工作 <form action="<%=response.encodeURL(contextPath + "/servlet/blabal.do")%>" method="post"> <a href="<%=response.encodeURL(contextPath + "/servlet/blabla.do")%>" Servlet Container会自动识别cookie是否禁止掉,如果禁止了就会在所有的url后面加jsessionid 1:理解错误,我以为人兄说的是只要禁掉一般的cookie,对会话cookie不做处理,他就不起作用了. 2:明白了,非常感谢.刚搜到的一个好贴 http://www.iteye.com/topic/10452 3.如果为了防止客户端禁用cookie,不会在每个连接和form acion都要做相应的工作吧?那样我以前写的程序,都没考虑到这点.还有没有别的方式. |
|
返回顶楼 | |
发表时间:2006-09-30
如果我不response.encodeURL()这样写的话,只能用cookie的形式了?
|
|
返回顶楼 | |
发表时间:2006-09-30
dogstar 写道 如果我不response.encodeURL()这样写的话,只能用cookie的形式了?
对 但为了防止客户端禁掉cookie,还是要做相应的处理,就是不知道还有没有别的方式. |
|
返回顶楼 | |