invalidate()方法具有什么功能呢?

欢喜 Servlet 发布时间:2025-05-28 10:58:30 阅读数:15292 1

invalidate()方法简介

`invalidate()`
  是`HttpSession`接口中定义一个方法
    用于显式地销毁当前会话(Session)
	  调用该方法后
	   与该会话相关的所有数据都会被清除
	    浏览器下次访问时将创建一个新的会话

invalidate()方法功能

功能 描述
销毁当前会话 删除服务器端存储的 Session 数据
清除用户状态如用户登录信息、购物车内容等
防止会话劫持 登出时应主动销毁会话,避免被他人复用
释放服务器资源 减少内存占用

invalidate()方法定义

void invalidate() throws IllegalStateException;
  - 无参数,无返回值
  - 抛出异常:
    - 如果会话已经被销毁
	    再次调用会抛出`IllegalStateException`

例1:用户退出登录(Logout)

@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException {

        // 获取当前会话(不强制创建)
        HttpSession session = request.getSession(false);

        if (session != null) {
            // 销毁会话
            session.invalidate();
        }

        // 跳转到登录页
        response.sendRedirect("login");
    }
}
注意事项:
   当调用`session.invalidate()`
     就不能再使用该`session`对象
	    否则会抛出异常

例2:在Filter中判断是否已登录

@WebFilter("/*")
public class AuthFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;

        String uri = req.getRequestURI();

        // 白名单路径无需登录即可访问
        if (uri.endsWith("login") || uri.endsWith("login.jsp")) {
            chain.doFilter(request, response);
            return;
        }

        // 检查是否有有效会话和用户登录状态
        HttpSession session = req.getSession(false);
        if (session == null || session.getAttribute("user") == null) {
            res.sendRedirect("login");
        } else {
            chain.doFilter(request, response);
        }
    }
}

invalidate()方法注意事项

 用户登出时务必调用`invalidate()`
    防止Session被复用,提升安全性
  不要重复调用`invalidate()`
     否则会抛出`IllegalStateException` 
  不要在`invalidate()`后继续操作Session对象
     已失效的Session不能再读写属性
  可结合监听器使用
     如:
  	  `HttpSessionlistener`记录用户登出行为
  适合用于MVC架构
     控制器中处理登出逻辑
	   视图中不再依赖Session数据

invalidate()方法使用场景

场景 使用方式
用户退出登录 调用 `session.invalidate()` 清除身份信息
强制用户下线 管理员操作时主动销毁某用户的 Session
安全登出 结合Cookie 清理,实现完整登出流程
多设备登录控制登录新设备时销毁旧设备Session
Session注入防护用户敏感操作前销毁旧Session 并生成新
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/Servlet/202505/325.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者