java 如何使用session
使用 HttpSession 的基本方法
在 Java Web 应用中,可以通过 HttpServletRequest 对象获取 HttpSession。以下是创建和使用 session 的示例代码:
// 获取当前请求的 session,如果不存在则创建一个新的
HttpSession session = request.getSession();
// 设置 session 属性
session.setAttribute("username", "user123");
// 获取 session 属性
String username = (String) session.getAttribute("username");
// 移除 session 属性
session.removeAttribute("username");
// 使 session 失效(用户登出时常用)
session.invalidate();
配置 session 超时时间
session 的超时时间可以通过 web.xml 配置或代码设置:
<!-- 在 web.xml 中配置 session 超时时间(分钟) -->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
或者通过代码设置:

// 设置 session 超时时间(秒)
session.setMaxInactiveInterval(1800);
监听 session 事件
可以实现 HttpSessionListener 接口来监听 session 的创建和销毁事件:
@WebListener
public class MySessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("Session created: " + se.getSession().getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("Session destroyed: " + se.getSession().getId());
}
}
使用 session 实现用户登录
一个典型的用户登录功能可以使用 session 来维护用户状态:

// 用户登录处理
public void doLogin(HttpServletRequest request, HttpServletResponse response) {
String username = request.getParameter("username");
String password = request.getParameter("password");
if (authenticate(username, password)) {
HttpSession session = request.getSession();
session.setAttribute("user", username);
// 重定向到主页
response.sendRedirect("home.jsp");
} else {
// 返回登录页面并显示错误
request.setAttribute("error", "Invalid credentials");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
}
// 检查用户是否登录
public boolean isLoggedIn(HttpServletRequest request) {
HttpSession session = request.getSession(false);
return session != null && session.getAttribute("user") != null;
}
分布式环境下的 session 管理
在集群环境中,需要考虑 session 共享问题,常见的解决方案包括:
- 使用粘性会话(Sticky Session)
- 配置 session 复制(Session Replication)
- 使用集中式 session 存储(如 Redis)
// 使用 Spring Session 与 Redis 集成示例
@Configuration
@EnableRedisHttpSession
public class HttpSessionConfig {
@Bean
public LettuceConnectionFactory connectionFactory() {
return new LettuceConnectionFactory();
}
}
安全注意事项
使用 session 时应注意以下安全问题:
- 对敏感信息进行加密存储
- 实现安全的 session ID 生成机制
- 防范 session 固定攻击
- 用户登出时及时使 session 失效
// 防止 session 固定攻击的示例
public void doLogin(HttpServletRequest request) {
// 先使现有 session 失效
request.getSession().invalidate();
// 创建新 session
HttpSession newSession = request.getSession(true);
// 设置用户属性
newSession.setAttribute("user", username);
}






