要了解Session的底层工作原理。我们还是先看在一个会话过程中,同一个浏览器在访问多个web资源的情况好了,大致分为以下几个步骤:

1,浏览器访问某个Servlet,这时如果服务器要从请求对象中获取Session对象(第一次获取也是创建),那么服务器会为这个Session对象创建一个id:JSESSIONID
2,同时在对浏览器的响应过程中,这个Session会将JSESSIONID这个id以Cookie形式回送给客户端浏览器,记住,这时候Cookie服务器没有设置有效时间,因此是存在浏览器的缓存中,而不是在硬盘文件。
3,当用户继续在这个会话过程中访问其他Servlet,这时候这个Servlet再从请求对象中获取Session对象,注意这时候获取Session对象是从浏览器发来的请求中查询是否有名为JSESSIONID的这个Cookie,如果有,那么这个Session就不用再创建,而是直接根据查询服务器中这个相同JSESSIONID值的Session,换句话说就可以取得之前存在这个Session中的数据。
总结来说,Session是基于Cookie的。
(注:cookie并不是万能的,Session首先是依据cookie,但是有时候cookie不能用,这时候Session会查询发来请求的URL地址是否有JSESSIONID。)
Session的隐藏Cookie,我们可以做个小实验来验证下,在【myservlet】这个web工程下创建两个Servlet,分别命名为SessionDemo1和SessionDemo2:
在SessionDemo1代码为:
HttpSession session = request.getSession();
String data = "Message from SessionDemo";
session.setAttribute("data", data);
在SessionDemo2代码为:
HttpSession session = request.getSession();
System.out.println((String)session.getAttribute("data"));
我们在浏览器中打开HttpWatch,来访问SessionDemo1,因为是首次访问Servlet,查看SessionDemo1给浏览器的响应:
确确实实服务器发送回浏览器有这个JSESSIONID名称的Cookie,这时候如果我们再在打开的浏览器去访问SessionDemo2,那么在HttpWatch中观察请求包的内容发现:
再次访问服务器时,浏览器就会带着这个名为JSESSIONID的Cookie给服务器,服务器正是通过这个cookie中的JSESSIONID值去服务器中查找之前为该浏览器创建的Session。
如果我们将浏览器关闭,由于这个cookie没有设置“setMaxAge”,因此这个cookie只存在于浏览器的缓冲,浏览器关闭即被销毁。如果想使关闭浏览器之后,Session还能存在,我们就要人为的覆盖这个Session的cookie,并设置覆盖cookie的有效时间和有效路径。而这个cookie的值,也就是JSESSIONID的值,可以通过Session的getId()方法得到。
1,覆盖有效时间:
注意,服务器在为浏览器创建Session后,在用户没有操作的情况下(或者浏览器关闭后)默认为其维护30分钟。这点可以从Tomcat的【web.xml】文件中可以看出:
当然我们从这里也可以修改服务器默认的销毁无操作的Session时间。
当然如果我们不要全局设置所有服务器中Session的销毁时间,就在每个web应用中的web.xml文件中自定义添加<session-config>和<session-timeout>进行设置。
注:我们还可以通过Session对象的invalidate()方法,将某个Session进行立刻销毁。
对此,如果我们要覆盖一个Session的cookie并保存在硬盘文件中,我们设置的cookie有效时间就不要超过服务器默认的session-timeout时间。
2,覆盖有效路径:
如果我们创建一个Cookie对象,没有设置“setPath”,那么Cookie的有效路径为创建该Cookie的程序(通常为某个Servlet),即只有访问了这个程序时浏览器才会带着Cookie过去,那实在是“人脉不通”,访问这个web应用的其他资源就无法再使用Session了。
我们看看刚才的第一次访问Servlet时,服务器为浏览器创建的Session中的cookie的有效路径:
可以看到这个服务器默认将JSESSIONID这个cookie的有效路径设置为创建这个Session的web工程根目录。所以我们要覆盖Session中的cookie时也应该设置路径为该web工程根目录。
好,接下来对上面那个Servlet的例子进行改造,我们只需要在SessionDemo1中修改就行,因为这个首次将Session的cookie返回给客户端,修改后代码如下:
HttpSession session = request.getSession();
String data = "Message from SessionDemo";
session.setAttribute("data", data);
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(30*60);
cookie.setPath("/myservlet");
response.addCookie(cookie);
这样,当我们打开浏览器访问了SessionDemo1之后,就能在存放cookie的目录中找到该cookie,如果我们通过HttpWatch来查看可以看到重名的这个cookie:
虽然JSEESIONID这个cookie重名了,没有关系,因为其值都是一样的,并且如果我们将浏览器关闭后,没有设置cookie有效时间的(也是原先Session发来的)cookie将不复存在(存在浏览器缓存中,浏览器关闭就被销毁),这时重新打开一个浏览器,再去访问SessionDemo2依然能获取到原来Session中保存的内容:
注意,这是另外打开浏览器窗口访问的SessionDemo2!!另附:
通过这里我们可以看到,我们人为地将原先Session定义的cookie给替换了,而Session并不知道,只要能获得“JSESSIONID”这个cookie,它就认为cookie是存在的,可以从这个cookie中id值获取以前保存的信息,因此我们实现了一台主机共享一个Session,此时,当浏览器关闭,或者说结束一个会话后,依然能获取Session来获取之前保存的数据。
# servlet
# session工作原理
# session
# servlet Cookie使用方法详解(六)
# servlet之cookie简介_动力节点Java学院整理
# java中Servlet Cookie取不到值原因解决办法
# 全面了解servlet中cookie的使用方法
# Java Servlet及Cookie的使用
# servlet之session简介_动力节点Java学院整理
# servlet中session简介和使用例子
# 浅谈Servlet的Cookie和Session机制
# 这时候
# 可以看到
# 器中
# 带着
# 过程中
# 首次
# 为其
# 创建一个
# 为该
# 人脉
# 象中
# 客户端
# 这是
# 打开浏览器
# 就会
# 是在
# 好了
# 就在
# 在这个
# 还可以
相关文章:
建站之星如何一键生成手机站?
免费网站制作appp,免费制作app哪个平台好?
网站专业制作公司有哪些,做一个公司网站要多少钱?
香港服务器如何优化才能显著提升网站加载速度?
网站制作模板下载什么软件,ppt模板免费下载网站?
如何高效搭建专业期货交易平台网站?
网站图片在线制作软件,怎么在图片上做链接?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
自助网站制作软件,个人如何自助建网站?
如何快速启动建站代理加盟业务?
建站之星微信建站一键生成小程序+多端营销系统
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
如何用美橙互联一键搭建多站合一网站?
实现虚拟支付需哪些建站技术支撑?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
实例解析angularjs的filter过滤器
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何在万网主机上快速搭建网站?
电商网站制作价格怎么算,网上拍卖流程以及规则?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
定制建站方案优化指南:企业官网开发与建站费用解析
如何通过虚拟机搭建网站?详细步骤解析
广德云建站网站建设方案与建站流程优化指南
建站主机解析:虚拟主机配置与服务器选择指南
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
MySQL查询结果复制到新表的方法(更新、插入)
c# 在高并发场景下,委托和接口调用的性能对比
建站之星如何助力企业快速打造五合一网站?
如何快速上传建站程序避免常见错误?
如何获取开源自助建站系统免费下载链接?
盘锦网站制作公司,盘锦大洼有多少5G网站?
建站VPS推荐:2025年高性能服务器配置指南
建站主机服务器选购指南:轻量应用与VPS配置解析
建站主机选择指南:服务器配置与SEO优化实战技巧
焦点电影公司作品,电影焦点结局是什么?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
C#如何使用XPathNavigator高效查询XML
临沂网站制作企业,临沂第三中学官方网站?
建站之星备案流程有哪些注意事项?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
高端建站三要素:定制模板、企业官网与响应式设计优化
如何通过云梦建站系统实现SEO快速优化?
如何在万网开始建站?分步指南解析
建站之星在线版空间:自助建站+智能模板一键生成方案
兔展官网 在线制作,怎样制作微信请帖?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
如何规划企业建站流程的关键步骤?
建站主机类型有哪些?如何正确选型
*请认真填写需求信息,我们会在24小时内与您取得联系。