Javaweb 会话跟踪学习记录(2)—Session
Session 技术是指使用 HttpSession 对象实现会话跟踪的技术,是一种在服务器端保持会话跟踪的解决方案。HttpSession 对象用来保存单个用户访问时的一些信息,是服务器在无状态的HTTP 协议下用来识别和维护具体某个用户的主要方式。 HttpSession 对象会在用户第一次访问服务器时由容器创建(注意只有访问JSP、 Servlet 等程序时才会创建,只访问 HTML、IMAGE 等静态资源并不会创建),当用户调用其失效方法(invalidate() 方法)或超过其最大不活动时间时会失效。在此期间,用户与服务器之间的多次请求都属于同一个会话。
服务器在创建会话对象时,会为其分配一个唯一的会话标识 —SessionId,以“JSESSIONID”的属性名保存在客户端 Cookie 中,在用户随后的请求中,服务器通过读取 Cookie 中的 JSESSIONID 属性值来识别不同的用户,从而实现对每个用户的会话跟踪。
cookie 和 session 的区别:
- cookie 数据存放在客户的浏览器上, session数据放在服务器上。
- cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗,考虑到安全应当使用 session 。
- session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用 COOKIE。
- 将登陆信息等重要信息存放为 SESSION,其他信息如果需要保留,可以放在COOKIE中
1.获取HttpSession 对象
HttpServletRequest 接口提供了获取 HttpSession 对象的方法
方法 | 方法描述 |
---|---|
getSession() | 获取与客户端请求关联的当前的有效的Session,若没有Session关联则新建一个 |
getSession(boolean create) | 获取与客户端请求关联的当前的有效的Session,若没有Session关联,当参数为真时,Session被新建,为假时,返回空值。 |
示例: 获取 HttpSession 对象:
HttpSession session = request.getSession();
或HttpSession session = request.getSession(true);
2.HttpSession 接口的方法
HttpSession 接口提供了存取会话域属性和管理会话生命周期的方法
方法 | 方法描述 |
---|---|
void setAttribute(String key,Object value) | 以key/value的形式将对象保存在HttpSession对象中 |
Object getAttribute(String key) | 通过key获取对象值 |
void removeAttribute(String key) | 从HttpSession对象中删除指定名称key所对应的对象 |
void invalidate() | 设置HttpSession对象失效 |
void setMaxInactiveInterval(int interval) | 设定HttpSession对象的非活动时间(以秒为单位),若超过这个时间,HttpSession对象将会失效 |
int getMaxInactiveInterval() | 获取HttpSession对象的有效非活动时间(以秒为单位) |
String getId() | 获取HttpSession对象标识sessionid |
long getCreationTime() | 获取HttpSession对象产生的时间,单位是毫秒 |
long getLastAccessedTime() | 获取用户最后通过这个HttpSession对象送出请求的时间 |
3.存取会话域属性的方法
示例:存取会话域属性
//存储会话域属性 "username", 值为"CSDN"
session.setAttribute("username","CSDN");
//通过属性名 "username" 从会话域中获取属性值
String uname =(String)session.getAttribute("username");
//通过属性名将属性从会话域中移除
session.removeAttribute("username");
4.管理会话生命周期的方法
- 示例:获取会话的最大不活动时间
在这里插入代码片int time = session.getMaxInactiveInterval(); // 单位为”秒“
- 会话的最大不活动时间指会话超过此时间段不进行任何操作,会话自动失效的时间。
- HttpSession 对象的最大不活动时间与容器配置有关,对于 Tomcat容器,默认时间为 1800 秒。
- 通过 web.xml 设置会话的最大不活动时间(通用):
<