java - session 过期后自动注销

标签 java servlets jakarta-ee

我们的应用程序在 30 分钟后注销并重定向到登录页面,我在 web.xml 中指定 session 超时并使用 requestProcessor 进行重定向。我想向用户显示一条消息,说明您的 session 在 session 后已过期到期了,我该怎么做。自动注销? 我想在页面提示错误信息“ session 超时,请重新登录”。那我怎么能检测到 session 超时呢?会自动触发任何方法吗?

最佳答案

创建一个 Activity 检查器,它每分钟检查一次是否发生了任何用户 Activity (鼠标单击、按键),并向服务器端执行心跳以在用户 Activity 时保持 session Activity ,而在用户不活动时不执行任何操作.当 30 分钟没有 Activity 时(或服务器端设置的任何默认 session 超时),然后执行重定向。

这是一个在 jQuery 帮助不大的启动示例绑定(bind)点击和按键事件并触发 ajax 请求。

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
    $(document).ready(function() {
        $.active = false;
        $('body').bind('click keypress', function() { $.active = true; });
        checkActivity(1800000, 60000, 0); // timeout = 30 minutes, interval = 1 minute.
    });

    function checkActivity(timeout, interval, elapsed) {
        if ($.active) {
            elapsed = 0;
            $.active = false;
            $.get('heartbeat');
        }
        if (elapsed < timeout) {
            elapsed += interval;
            setTimeout(function() {
                checkActivity(timeout, interval, elapsed);
            }, interval);
        } else {
            window.location = 'http://example.com/expired'; // Redirect to "session expired" page.
        }
    }
</script>

创建一个 Servlet 来监听 /heartbeat 并且基本上只做以下事情:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    request.getSession();
}

保持 session 活跃。

当您将登录用户存储在 session 中时,只要 session 过期,它就会“自动”注销。因此您无需手动注销用户。

关于java - session 过期后自动注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3201991/

相关文章:

启用声音的 JavaPNS 推送通知

java - 同时为 HTTP 和 WS 客户端提供服务

tomcat - Camel 更新到 2.17.1 导致 Servlet 出现 404

java - Spring Controller 线程安全

java - 如何从 JSF 2.2 中提取 url 路径和查询参数?

java - 从hadoop 1迁移到hadoop2后如何恢复hadoop Mapreduce作业的性能

java - 有关 Java XML 生态系统概述的好引用资料?

java - 实例化 servlet 类时出错 [org.ran.FristServlet]

jakarta-ee - WebSphere Application Server 8.5 上的 SRVE0200E 错误

java - 使用 GlassFish v3、EJB 和 SOAPUI