PHP Session永远不会因为ajax调用而结束

时间:2013-05-30 18:18:48

标签: php jquery

我有一个使用ajax的web应用程序,每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
        }
      });
     }

2 个答案:

答案 0 :(得分: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分钟后用户没有移动鼠标,那么它将被重定向到退出页面,关闭他的会话。

答案 1 :(得分:0)

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

或者,在首次初始化时,将当前时间保存到会话var,然后为每次调用检查是否已超过一小时。如果为true,session_destroy()