Java Web Session

本文将介绍在 Java Web 中如何使用和操作 Session。

一、Sesion

具体请看:

前后端分离 Session

二、获取 Session

1
HttpSession session = request.getSession()

三、Session 方法

方法 说明
void setAttribute(String name, Object obj) 存储数据
Object getAttribute(String name) 通过键获取值
void removeAttribute(String name) 通过键移除键值对

四、Session 的维持

1. 客户端关闭后开启,服务器始终开启

默认情况下,浏览器中 session_id cookie 会在浏览器关闭后消失,因此,客户端关闭再开启后将无法获取到相同的 Session。

如果希望获取相同的 Session,可以手动设置 Cookie 的保存时长。

1
2
3
4
5
6
7
8
// 创建一个与JSESSIONID同键同值的Cookie
Cookie cookie = new Cookie("JSESSIONID", session.getID());

// 设置Cookie的保存时长
cookie.setMaxAge(time);

// 将Cookie通过response发送至客户端
response.addCookie(cookie);

2. 客户端不关闭,服务器关闭后开启

因为 Session 是在服务器的内存中存储,它将会随着服务器的关闭而被销毁,因此不是同一个 Session。

确保数据不因 Session 的销毁而丢失的方法:

  • 钝化:在服务器正常关闭之前,将 Session 对象序列化到硬盘上
  • 活化:在服务器重新启动后,将硬盘中的 Session 信息重新转化至内存中

Tomcat 默认会做 Session 的钝化活化,直接使用 Tomcat 启动项目,可以使保存在 Session 中的数据不丢失;

在 IDEA 中通过 Tomcat 启动项目时,默认会在每次启动时删除硬盘中钝化的数据,因此数据将随着 Session 的销毁而丢失。

五、Session 的销毁

  • 服务器关闭
  • 对 Session 对象调用 Invalidate() 方法
  • 如果 30 分钟不发生活动,Session 对象将会失效

参考