2012-01-08 167 views
1

我真的很想提醒我的用户在会话到期前保持会话不变。如何用JavaScript实现会话到期提醒?

昨天我问了一个问题“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函数就可以工作,但不会在函数运行后跟随链接。

下面的代码:

<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> 

任何人可以帮助我纠正这些问题呢?

+0

这是一个http://codereview.stackexchange.com问题。 – 2012-01-08 15:10:05

+0

我不知道有一个代码审查网站 – TheCarver 2012-01-08 15:12:25

+1

我也花了几分钟或几秒钟的时间,将其添加到当前客户端的机器时间,然后轮询以查看其中一个是否大于另一个。您只需确保始终为每个保持会话活动的服务器请求(AJAX,常规页面请求等)更新该时间。将它保存在cookie中可能是最简单的方法。 – 2012-01-08 15:12:33

回答

1

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

另一件事:您必须清除startMainTimer开头的主定时器,否则每次用户在某处单击时,都会启动一个附加定时器。

而且你知道startMainTimer的最后一次调用会丢失一个参数吗?

+0

我认为mousedown()效果更好。它适用于标准的点击和拖放... – TheCarver 2012-01-08 15:22:06

+0

我刚刚编辑我的问题以显示缺少的参数,并在脚本检测到用户鼠标活动时清除计时器。这是你的意思吗? – TheCarver 2012-01-08 15:29:44