如何使用JavaScript实现会话过期提醒?

时间:2012-01-08 14:53:37

标签: javascript jquery session

我真的想提示我的用户在会话到期前不久保持会话活动。

昨天,我问了问题“How can I check if the session is dead, then prompt an alert?”,并且有人回答了一个AJAX / JSON解决方案,该解决方案每30秒拨打一次ASP页面。这不起作用,因为对服务器的调用使会话保持活动状态 - 所以它永远不会注销。

我一直在阅读并遇到类似的[SO]问题,其中有人建议使用JS倒计时,促使用户在会话即将到期前5分钟更新会话。

这是我到目前为止所做的,但是:

  1. 函数startMainTimer似乎没有保留时间,因为当计时器处于警报状态时我没有收到警报。
  2. $('body').mousedown()功能无效。它可以工作,但是如果用户点击链接,则mousedown功能可以正常工作,但在功能运行后不会跟随链接。
  3. 以下是代码:

    <script>
    $(document).ready(function() {
        $.ajax({ // get session expiration value e.g. 60
        type : 'GET',
        url : '../getSessionValue.asp',
        dataType : 'text',
        success : function(data) {
            if (data != '') {
                var newSessionValue = data - 5
                startMainTimer(newSessionValue * 60000); // deduct 5 minutes, convert to mSeconds & call startNewTimer()
            }
        }
        });
    
        $('body').mousedown( function() { // if user clicks anywhere on page call ajaxRenewSession() function
            ajaxRenewSession();
        });
    
        $('#userButtonRenewSession').click( function() { // if user clicks continue browsing button
            ajaxRenewSession();
        });
    });
    
    function startMainTimer(newSessionValue,restart) {
        if (restart == 'yes') {
            clearInterval(interval);
        }
        var counter = 0;
        var interval = setInterval(function() {
            counter++;
            if (counter == newSessionValue) {
                alert("Your session is about to expire!");
                clearInterval(interval);
            }
        }, 1000);
    }
    
    function ajaxRenewSession() { // AJAX the server to renew session, get session timeout value and then reset JS timer
        $.ajax({
        type : 'GET',
        url : '../renewSession.asp',
        dataType : 'text',
        success : function(data) {
            if (data != '') {
                    var newSessionValue = data - 5
                    startMainTimer(newSessionValue * 60000, 'yes');
            }
        }
        });
    }
    </script>
    

    有人可以帮我纠正这些问题吗?

1 个答案:

答案 0 :(得分:1)

mouseup似乎有用,我在stackoverflow.com上测试过。但是,它可能在某些情况下不起作用,例如如果用户按下一个链接,拖动它然后放下它。在这种情况下,没有为我提出任何事件。

另一件事:您必须在startMainTimer开头清除主计时器,否则,每当用户点击某处时,都会启动另一个计时器。

你知道startMainTimer的最后一次调用错过了参数吗?