会话到期后自动注销

sar*_*rah 5 java servlets java-ee

我们的应用程序在30分钟后注销并被重定向到登录页面,我在web.xml中指定会话超时并使用requestProcessor进行重定向.我想向用户显示一条消息,说明会话到期后会话已过期,如何我可以那样做.自动注销?我想提示页面上的错误消息"会话超时,请再次登录".然后我怎么能检测到会话超时?任何方法会自动触发吗?

Bal*_*usC 10

创建一个活动检查器,检查每一分钟是否发生了任何用户活动(mouseclick,keypress)并对服务器端执行心跳以在用户处于活动状态时保持会话处于活动状态,并在用户未处于活动状态时不执行任何操作.如果30分钟内没有活动(或者在服务器端设置了默认会话超时),则执行重定向.

这是一个启动示例,jQuery很少帮助绑定click和keypress事件并触发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>
Run Code Online (Sandbox Code Playgroud)

创建一个Servlet侦听/heartbeat并基本上只执行以下操作:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    request.getSession();
}
Run Code Online (Sandbox Code Playgroud)

让会话保持活力

将登录用户存储在会话中时,只要会话过期,它就会"自动"注销.因此您无需手动注销用户.