Session
Session
服务器端会话技术,在一次会话的多次请求中间共享数据,将数据保存在服务器端的对象中,HttpSession
。(request.getSession()
)
注意:所谓的一次会话,通常指的是不同IP或者同一IP的不同客户端,比方说在同一台机器上使用360浏览器和谷歌浏览器访问百度,在百度的服务器终端会创建两个Session,甚至是同一台客户机,同一个浏览器,不同的标签页都可以算是一个新的会话。
共享数据
1 | Object getAttribute(String name); |
Session原理
首先Session是依赖于Cookie的。
服务器是这样判断请求是属于哪个会话的!
Session的一些细节
当客户端关闭后,服务器不关闭,两次获取Session是否为同一个?
默认情况下,不是的,原因也很简单,因为Cookie默认情况下当浏览器关闭之后会被清空,因此JSESSIONID的cookie也会被清空,重新打开浏览器发送同一请求的时,不会有JSESSIONID头,因此都武器将重新创建一个HttpSession
如果需要保证下次请求的session相同,则需要对JSESSIONID的cookie进行持久化。
1 | HttpSession session = request.getSession(); |
当服务器重启后,客户端再次获取Session是否为同一个?
理论上不是,当服务器关闭的时候,内存中的所有Session都将会被销毁,因此不可能是同一个。
但是处于安全考虑,原生的Tomcat服务器在重启的时候会将Session对象序列化到根目录的Work
文件夹中,当重启服务器完成之后,会反序列化Work
文件夹中的Session对象,以此来实现重启服务器后也能够获得同一个Session对象。
Idea开发环境中,会对运行使用的Tomcat进行配置,再重启服务器的时候会先把Work
文件夹删掉,然后再创建新的Work
文件夹,因此无法实现和饥饿原生tomcat一样的安全功能。
Session什么时候会被销毁
- 服务器关闭的时候
- session对象调用
invalidate()
- session默认失效时间为30分钟,也就是说浏览器在30分钟内无任何session操作,session将失效
Session特点
- 用于储存一次会话多次请求的数据,存在服务器中
- session可以存储任意类型,任意大小的数据