Session会话技术相关知识
- Session是存在服务器的内存中的。
- 一个用户浏览器,独享一个session对象。
- Session中的属性的默认生命周期是30min。有三种方式修改它的生命周期,第一种修改方式对所有web应用都有效,即
tomcat/conf/web.xml中
<session-config>
<session-timeout>30</session-timeout>
</session-config>
第二种修改方式对单个web应用有作用:
<session-config>
<session-timeout>10</session-timeout>
</session-config>
只对本web应用生效
如果两个配置文件冲突,就以单个web应用的配置为准。
还可以在程序中修改session的生命周期(与Cookie的生命周期计算方式不一样):
session.setMaxInactiveInterval(600); //以秒为单位
对Session生命周期的详解:
(费资源的两个操作:网络和数据库)
Session实现原理
服务器为什么能为不同的浏览器设置不同的session:
第一次访问有创建session对象的servlet时,为该浏览器用户创建有sessionID标识的唯一session对象,并将该sessionID存储到浏览器cookie中,之后用该浏览器访问该servlet时,会把含有sessionID的cookie附加到http请求中,在服务器内存中找到相应的session而不是再次创建。
Session知识扩展
我们知道关闭浏览器后对应的session也会被销毁,那么如何实现即使关闭浏览器还能访问该session中的内容的呢?
首先思考一下这样一个问题,关闭浏览器后,session还在吗?答案是还在的,因为对session是由服务器管理的,确定session的生命周期后,该session不会随浏览器的关闭而销毁的,而是等到session生命周期后才会销毁。
这里常会有这样的一个面试题:关掉IE再打开IE上次购买的商品还在。–>涉及session的销毁时间。
如果是自己实现的话可以这样做:手动获取服务器创建的session ID,在把session的ID保存到浏览器的cookie中。(注意,session 的id不能自定义,而是读取cookie的默认ID(JSESSIONID))
Cookie禁用后还能使用Session
Cookie跟session有千丝万缕的关系,cookie要讲session id附加到请求中。禁用Cookie则也不能访问session。但是能不能做到禁用cookie也能使用session呢?