Servlet 中 HttpSession 介绍

2021-12-30 0 By admin

Session 是记录浏览器状态的机制,解决http无状态的另一种方式。Session能存放对象,并且Session是存在服务器端的。

当浏览器访问服务器的Servlet,并且使用了 response.getSession() 才会自动给该浏览器颁发一个带JESSIONID的Cookie。
JESSIONID就是唯一标识浏览器Session的id,该cookie默认生命周期为当前浏览器,所以关闭了浏览器Session就会失效。

Session的有效期是访问一次就重置,而cookie的是累计,Session存放于服务器内存,超时会自动删除,默认超时为30min,一般存用户级别数据,即当前会话有效的。

一、Session的活化和钝化

  1. 钝化:服务器关闭时还有正常的Session存在并未超时,就会以文件的形式存储起来
  2. 活化:服务器再次开启时,恢复存储起来的Session对象

实现该功能的对象需要实现Serializable接口,涉及了序列化。

二、常用方法

  1. long getCreationTime()//获取Session被创建时间
  2. String getId() //获取Session的id
  3. long getLastAccessedTime() //返回Session最后活跃的时间
  4. ServletContext getServletContext() //获取ServletContext站点对象
  5. void setMaxInactiveInterval(int var1) //设置Session超时时间
  6. int getMaxInactiveInterval() //获取Session超时时间
  7. Object getAttribute(String var1) //获取Session属性,代替了getValue
  8. Enumeration getAttributeNames() //获取Session所有的属性名
  9. void setAttribute(String var1, Object var2)//设置Session属性,可存对象,在于域中
  10. void removeAttribute(String var1) //移除Session属性
  11. void invalidate() //销毁该Session
  12. boolean isNew() //该Session是否为新的

三、常见操作

HttpSession httpSession = request.getSession();
httpSession.setAttribute("Session", "Howl");
System.out.println(request.getSession().getAttribute("Session"));
//当浏览器禁止了Cookie的时候,encodeURL的另一个功能,带上JESSIONID访问即URL地址重写,会自动判断浏览器是是否支持的
//通过在其中包含会话ID对指定的URL进行编码,或者,如果不需要编码,则返回不变的URL
//之后服务器端会自动获取该ID
response.sendRedirect(response.encodeURL(url));
验证码
//getCode()获取验证码存入Session
request.getSession.setAttribute("code", getCode());
//然后和requset获取的对比
request.getParameter("code") == request.getSession.getAttribute("code")