今天看到rails 的session 实现方式时,突然对Tomcat的session 实现方式也产生了好奇心.
一般会认为客户端在第一次访问Web容器时,容器会创建一个Session,这个Session被添加到一个Map 里,由容器负责维护。这个大家都很清楚,也很容易理解。但是关键是如何与客户端浏览器交换这个SessionId 的信息,很多书都提到有三种方式:cookie、URL重写、和隐藏表单,后两种是类似的。
如果是第一种,那么Sessionid被关联到一个浏览器一关闭就失效的cookie里,然后客户端浏览器每次用这个cookie来标示会话。注意这些都是Web容器替我们完成的。
如果是URL重写,则每个请求字符串后面会被附加如;jsessionid=XXXXXXXXX这样的标示,用于标示会话。
容器何时决定使用哪一种方法?
我找了一个Winsock Expert的软件来监测IE 浏览器发送和接收的信息,IE的版本为6.0,Tomcat的版本为5.0.19,结果如下:当IE浏览器向Tomcat第一次发出请求时,
不包含任何Cookie信息,当然这是第一次访问这个站点。为了比对Cookie的内容,我在访问的index.jsp页面中使用了response.setCookie向响应放了一个名为newCookie的Cookie。
最后监测的结果如下,除了用户自定义的newCookie之外,还有一个名为JSESSIONID的Cookie被加入了响应。
在接下来的请求中,都包含了JSESSIONID这个Cookie,在请求内容中能清楚的看到这一点:
但是,如果用request.getCookies是无法看到JSESSIONID这个Cookie的,只能看到我自定义的那个newCookie,JSESSIONID这个Cookie被Tomcat隐藏起来了,对于编程人员来说,是不可见的(我无法使用${cookie.JSESSIONID.name}或是${cookie.JSESSIONID.value}来检查它的名称和值,虽然这些对我来说都是已知的)。
得出如下结论:如果客户端禁用cookie,就用jsessionid,它的内容不写在硬盘,而是被ie缓存在内存了,即便客户端禁用了cookie,jsessionid还是存在的,这样一来的话,服务器就可以知道来自客户端的请求是不是来自同一个流览器了.
分享到:
相关推荐
tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制...
linux.tomcat-session共享.redis.安装包
包含的jar包如下: commons-pool2-2.0.jar jedis-2.5.2.jar tomcat-juli-adapters.jar tomcat-juli.jar tomcat-redis-session-manager1.2.jar
如何实现服务器集群session共享,redis用来tomcat共享。
使用说明:请严格按照资源内的readme文档来说明部署,不要搞错版本,完美支持Tomcat8和Tomcat9等新版本Tomcat,仅支持JDK8以上版本JDK。
在网上找了好久,终于找到了可用的资源,本人亲自测试,绝对tomcat7下可用。
此压缩包为tomcat8利用redis实现session共享所需要的jar包,包含(commons-pool2-2.6.0.jar、jedis-2.9.0.jar、tomcat-redis-session-manager.jar)直接将三个jar包复制Tomcat目录lib下面,在修改conf下context.xml...
Tomcat8+redis实现session共享 Tomcat8+redis实现session共享
tomcat7集群实现session共享
本资源通过Redisson组件实现Tomcat的非黏性会话管理功能,支持多个Tomcat共享存储Session会话信息,支持Tomcat的6.x、7.x、8.x版本,支持JDK1.8+或JDK1.6+环境。Redisson通过重定义Session相关类方法的方式实现...
傻瓜式的描述怎么实现在一台windows机器上怎么实现Apache2.2+Tomcat6.0的负载均衡和session复制,不用动脑子的,因为我自己在配置过程中由于某些设置有问题,死活不成功,被折磨了很久,所以把分析过程写下来,如果...
一直以来,我误解认为启动了n个tomcat,则Session需要同步复制到n个Tomcat中存在,因此在启动了6个以上的Tomcat,性能会大大下降。 而实际情况下,采取Apache 加Tomcat进行负载均衡集群的时候,是可以不用将Session...
包含对于Memcached-Session-Manager配置的五种Tomcat集群session共享机制和策略 jar包及文档
nginx+tomcat8+memcached session共享所需jar包 直接放到tomcat/lib下即可
使用redis实现Tomcat集群的Session共享,压缩包中为所需要的jar文件,具体见http://blog.csdn.net/wangzi19933/article/details/54427679
REDIS+TOMCAT8 实现session共享 ,结合NGINX实现负载均衡(Windows)
tomcat redis session共享,支持tomcat7 jdk7、tomcat8 jdk7、tomcat8 jdk8、tomcat8.5 jdk7、tomcat9 jdk8
tomcat7 + java7 环境下,实现容器环境下,多服务器间的session共享。底层通过redis实现。(文件中包含所需的jar、配置说明和demo文件)
NULL 博文链接:https://fanshuyao.iteye.com/blog/2400975
完整tomcat8内含session共享包,亲自测试可以使用,有问题可以私聊。