0

我有一个使用 ajax 并每 10 秒执行一次以更新一些数据的网络应用程序。我设置了一个 PHP 会话,在 60 分钟不活动后 php 会话终止并将用户踢出页面,但在此页面中会话永不过期,我猜这是因为 Ajax 调用每 10 秒执行一次,服务器刷新“超时”,我的会话在我不执行 ajax 的其他页面中运行良好。你们认为我在这个页面中的问题是因为 ajax 每 10 秒调用一次?

我的jQuery代码:

    delay(function(){
        check();
    }, 10000 );

    function check()
    {
      $.ajax({
        dataType: "json",
        url: "lead.php",
        cache: false,
        success: function(msg){
            //Do something
        }
      });
     }
4

2 回答 2

2

如果您想在 X 时间后关闭会话,无论是否发出 ajax 请求,但前提是用户在页面上没有活动,您可以使用我正在使用的以下代码:

(function () {
    // After 30 minutes without moving the mouse, the user will be redirect to logout page
    var time2refresh = 30;
    // This is how many time the user has to be inactive to trigger the countdown of 30 minutes
    var timeInactive = .5;
    // This will store the timer in order to reset if the user starts to have activity in the page
    var timer = null;
    // This will store the timer to count the time the user has been inactive before trigger the other timer
    var timerInactive = null;
    // We start the first timer. 
    setTimer();
    // Using jQuery mousemove method 
    $(document).mousemove(function () {
            // When the user moves his mouse, then we stop both timers
        clearTimeout(timer);
        clearTimeout(timerInactive);
            // And start again the timer that will trigger later the redirect to logout
        timerInactive = setTimeout(function () {
            setTimer();
        }, timeInactive * 60 * 1000);
    });
    // This is the second timer, the one that will redirect the user if it has been inactive for 30 minutes
    function setTimer() {
        timer = setTimeout(function () {
            window.location = "/url/to/logout.php";
        }, time2refresh * 60 * 1000);
    }
})();

所以这个函数的逻辑是这样的:

1) 用户登录到您的站点 2) 在 0.5 分钟(30 秒)不活动后,将开始一个 30 分钟的倒计时 3) 如果用户移动鼠标,两个计时器都会重置,第一个计时器会重新开始。4) 如果 30 分钟后用户没有移动他的鼠标,那么它将被重定向到注销页面,关闭他的会话。

于 2013-05-30T18:53:25.180 回答
0

我猜lead.php使用session_start(). 您只能在该文件中删除它。

或者,在第一次初始化时,将当前时间保存到会话变量中,然后对于每次调用,检查是否超过一个小时。如果真实,session_destroy()

于 2013-05-30T19:27:43.713 回答