Session
Session是指使用HttpSession对象实现会话跟踪的技术,是一种在服务器端保持会话跟踪的解决方案。
HttpSession对象是javax.servlet.http.HttpSession接口的实例,也称为会话对象。
HttpSession对象会在用户第一次访问服务器时由容器创建(注意只有访问JSP、Servlet等程序时才会创建,只访问HTML、IMAGE等静态资源并不会创建),当用户调用其失效方法(invalidate()方法)或超过其最大不活动时间时会失效。在此期间,用户与服务器之间的多次请求都属于同一个会话。
Session和Cookie的主要区别在于:
- Cookie是把用户的数据写给用户的浏览器。
- Session技术把用户的数据写到用户独占的Session中。
服务器在创建会话对象时,会为其分配一个唯一的会话标识——SessionId,以“JSESSIONID”的属性名保存在客户端Cookie中,在用户随后的请求中,服务器通过读取Cookie中的JSESSIONID属性值来识别不同的用户,从而实现对每个用户的会话跟踪。
Session工作原理
获取HttpSession对象
HttpServletRequest接口提供了获取HttpSession对象的方法:
在程序中第一次执行request.getSession()时,服务器才会创建Session。
HttpSession接口提供的方法
HttpSession接口提供了存取会话域属性和管理会话生命周期的方法:
Session存取数据
- 存储会话域属性:
session.setAttribute("username"," haha");
- 会话域中获取属性值:
String uname = (String)session.getAttribute("username");
- 会话域中删除属性:
session.removeAttribute("username");
- 用户登录示例: 当用户当用户登录成功后,将用户信息存储到Session中,并重定向到主页面显示用户信息。
Session生命周期
- Session失效时间:Session具有一定声生命周期,如果Session超过会话的最大不活动时间,会话自动失效,会话的最大不活动时间指会话超过此时间段不进行任何操作。
- 设置Session的失效时间。
- 方法1:在工程的web.xml中配置Session的生命周期,单位为分钟。
<Session-config><Session-timeout>15</Session-timeout></Session-config>
- 方法2:在程序硬编码设置。
Session.setMaxInactiveInterval(30 * 60); //设置单位为秒,设置为-1永不过期;
- 方法3:在Tomcat安装目录下conf/web.xml中配置(Web容器级别)。
<Session-config><Session-timeout>15</Session-timeout></Session-config>
- 方法1:在工程的web.xml中配置Session的生命周期,单位为分钟。
- 手动销毁Session:可以通过调用invalidate()方法立即清除会话对象及其所有会话域属性,同时响应客户端浏览器清除Cookie中的JSessionID,在实际应用中,此方法多用来实现系统的“安全退出”功能。