SESSION是基于COOKIE技术的,没有COOKIE,就没有SESSION。
SESSION是将SESSION的ID存储COOKIE中,而SESSION的数据保存在服务器;每次向网站请求时,只需要发送SESSION的ID,通过SESSION的ID将服务器端保存的用户数据调出来。
Session 工作原理
执行流程:
第一次请求,请求头中没有jsessionid的cookie,当访问到对应的servlet资源时,执行到getSession()会创建HttpSession对象;进而响应时就将session的id作为cookie的value,响应到浏览器 Set-cookie:jsessionid=xxxx;再一次请求时,http请求中就有一个cookie:jsessionid=xxxx信息,那么该servlet就可以通过getSession()获取到jsessionid在服务器内查找对应的session对象,有就使用,无就创建。
Session 创建、获取、销毁
// 获取session对象,服务器底层创建Session
HttpSession session = request.getSession();// 获取session对象的唯一标识:sessionID (JSESSIONID=E925DE1EF00F7944537C01A3BC0E2688)String jsessionid = session.getId();// 销毁session对象中的jsessionidsession.invalidate();
Session 共享范围
http域对象之一,服务器中可跨资源共享数据。
// 往 session 中存储 msg
HttpSession session = request.getSession();session.setAttribute("msg", "helloSession");// 获取 msgHttpSession session = request.getSession();Object msg = session.getAttribute("msg");// 删除域对象中的数据session.removeAttribute("msg");
Session 生命周期
一般都是默认值 30 分钟,无需更改。取决于 Tomcat 中 web.xml 默认配置:
session-config>
<session-timeout>30</session-timeout></session-config>
Session生命周期结束时机:
浏览器关闭:销毁Cookie中的jsessionid=xxx