会话到期时自动重定向

时间:2011-03-24 10:07:08

标签: javascript jsp

如何在会话中重定向页面(自动),而不会在页面上执行任何用户操作。?

1 个答案:

答案 0 :(得分:6)

创建一个活动检查器,检查每一分钟是否发生任何用户活动(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>

创建一个Servlet来监听/heartbeat,基本上只做以下几点:

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

让会话保持活力。