Session简介:
类型:HttpSession
作用:区分不同用户
Session工作原理:
Session的创建
Session的创建时机是在request.getSession()方法第一次被调用时。
Session被创建后,同时还会有一个名为JSESSIONID的Cookie被创建。
这个Cookie的默认时效就是当前会话。
Session的使用
Session被创建后,对应的Cookie被保存到浏览器中,之后浏览器每次访问项目时都会携带该Cookie。
当我们再次调用时会根据该JSESSIONID获取已经存在的Cookie,而不是在创建一个新的Cookie。
如果Cookie中有JSESSIONID,但是JSESSIONID没有对应的Session存在,则会重新创建一个HttpSession对象,并重新设置JSESSIONID。
Session使用:
创建&获取:
html&servlet:request.getSession();
jsp:运行jsp页面。直接使用
setAttribute() getAttribute() removeAttribute()
Session有效性:
默认情况:与Cookie一致,会话级别。
持久化Session:
- 持久化特殊的Cookie(key:JSESSIONID)
- 持久化Session(30分)
web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
session.setMaxInactiveInterval(ss):设置session的非活动时间
ss>0:在ss秒后失效
ss=0:立即失效
ss<0:永不失效
设置session失效:session.invalidate()
Session钝化和活化:
钝化:
定义:将session对象及session中存放数据一同从内存序列化到硬盘的过程,称之为钝化。
时机: 关闭服务器触发
活化::
定义:将session对象及session中存放数据一同从硬盘反序列化到内存的过程,称之为活化。
时机:重启服务器触发
表单重复提交问题:
- 转发跳转页面后,刷新页面。
- 提交表单后,点击回退按钮
- 网速慢等情况
使用token解决表单重复提交:
token本质UUID,UUID是一个32位的随机数(全球唯一)
步骤: - 创建UUID,同时存放到session域和隐藏域。
- 提交表单,分别获取两个域中的UUID,进行比较
相等:提交表单,移除session域中的UUID
不等:不提交表单