Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 倒计时计时器达到0后会话销毁_Javascript_Php_Jquery_Ajax_Session - Fatal编程技术网

Javascript 倒计时计时器达到0后会话销毁

Javascript 倒计时计时器达到0后会话销毁,javascript,php,jquery,ajax,session,Javascript,Php,Jquery,Ajax,Session,如果用户在2小时内处于非活动状态,则对注销用户使用倒计时 function Timer(duration, display) { var timer = duration, hours, minutes, seconds; setInterval(function () { hours = parseInt((timer /3600)%24, 10) minutes = parseInt((timer / 60)%60, 10)

如果用户在2小时内处于非活动状态,则对注销用户使用倒计时

function Timer(duration, display)  {
    var timer = duration, hours, minutes, seconds;
    setInterval(function () {
        hours = parseInt((timer /3600)%24, 10)
        minutes = parseInt((timer / 60)%60, 10)
        seconds = parseInt(timer % 60, 10);

        hours = hours < 10 ? "0" + hours : hours;
        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;

        display.text(hours +":"+minutes + ":" + seconds);
        if(hours == 0 && minutes == 0 && seconds == 0){
            $.ajax({
              url:'../ajax/logoutuser.php',

              success: function(data){
                  console.log('logout');
              }
            });
        }else{
           --timer;
        }

    }, 1000);
}

window.onload = function () {
  var twentyFourHours = 1 * 1 * 3;
  var display = $('#time');


 Timer(twentyFourHours, display);


};
功能计时器(持续时间、显示){
var定时器=持续时间、小时、分钟、秒;
setInterval(函数(){
小时=parseInt((计时器/3600)%24,10)
分钟=parseInt((计时器/60)%60,10)
秒=parseInt(计时器%60,10);
小时=小时<10?“0”+小时:小时;
分钟=分钟<10?“0”+分钟:分钟;
秒=秒<10?“0”+秒:秒;
显示文本(小时+“:“+分钟+”:“+秒);
如果(小时=0和分钟=0和秒=0){
$.ajax({
url:“../ajax/logoutuser.php”,
成功:功能(数据){
console.log(“注销”);
}
});
}否则{
--定时器;
}
}, 1000);
}
window.onload=函数(){
var twentyFourHours=1*1*3;
变量显示=$(“#时间”);
计时器(24小时,显示);
};
由于我不能在jquery函数上调用sessiondestroy,所以我使用ajax发出请求

<?php

require_once '../config/database.php';
require_once '../includes/dboperations/user.php';

$database = new Database();
$conn = $database->getConnection();
$db =  new User($conn);

$user = json_decode($_SESSION["user"]);
        $db->offlineStatus($user->user_id);


        session_destroy();

        echo "<script>window.location.href = '../index.php'</script>";

?>

代替php文件中的echo脚本,在ajax代码的成功函数中输出它

success: function(data){
         console.log('logout');
         window.location.href = '../index.php';
}

代替php文件中的echo脚本,将其输出到ajax代码的success函数中

success: function(data){
         console.log('logout');
         window.location.href = '../index.php';
}

您可以通过php的方式实现。差不多

$expiry = 1800 ;//session expiry required after 30 mins
if (isset($_SESSION['LAST']) && (time() - $_SESSION['LAST'] > $expiry)) {
    session_unset();
    session_destroy();
}
$_SESSION['LAST'] = time();

您可以通过php的方式实现。差不多

$expiry = 1800 ;//session expiry required after 30 mins
if (isset($_SESSION['LAST']) && (time() - $_SESSION['LAST'] > $expiry)) {
    session_unset();
    session_destroy();
}
$_SESSION['LAST'] = time();

但它是否会破坏会话?它将我重定向到我的主页,因为会话没有破坏。。这就是为什么我在echo上使用window.location.href来检查是否会调用session_destroy。是的,它会根据您在ajax期间调用的php代码来销毁会话。是的,我只是把我的ajax请求搞砸了。。但它是有效的。。现在我必须弄清楚,根本不采取任何行动。。像鼠标移动/点击按键…但它会破坏会话吗?它将我重定向到我的主页,因为会话没有破坏。。这就是为什么我在echo上使用window.location.href来检查是否会调用session_destroy。是的,它会根据您在ajax期间调用的php代码来销毁会话。是的,我只是把我的ajax请求搞砸了。。但它是有效的。。现在我必须弄清楚,根本不采取任何行动。。就像鼠标移动/点击按键…但是`$\u会话['LAST']在页面重新加载时是否刷新其值?。因为我使用倒计时器实际要做的是,只有当页面不再重新加载时,它才会运行。如果您将此代码添加到公共文件中,这将确保每个页面加载,它将决定在后端注销。尽管如此,我们仍然可以在前端(JS)中添加计时器功能,我们可以实现它。但是`$\u会话['LAST']在页面重新加载时是否刷新其值?。因为我使用倒计时器实际要做的是,只有当页面不再重新加载时,它才会运行。如果您将此代码添加到公共文件中,这将确保每个页面加载,它将决定在后端注销。不过,我们可以在前端(JS)中添加计时器功能,我们可以实现它。据我所知,您的非活动检测强制用户刷新/重新加载页面,将其视为活动页面。将不活动视为不活动不是更好吗(没有鼠标移动,没有按键,没有点击)?我不知道如何检查这一点。但是如果你能给我一个想法,那会更好,因为这就是我试图做的。如果最主要的原因是客户端的一些事情(例如破坏cookie),你可能会想要一个Javascript解决方案(就我个人而言,我不喜欢这样做,因为客户端Javascript可以被用户伪造)。如果这是您想要实现的服务器端内容,请选择服务器端会话销毁。或者两者兼而有之……我更喜欢服务器端,尽管b/c更安全:在php代码中记录用户活动,如果活动(post/get等),只需踢用户(销毁会话)时间>最大用户空闲时间。看看这个例子。在SO上有很多解决方案:)据我所知,您的非活动检测会强制用户刷新/重新加载页面,并将其视为活动页面。将不活动视为不活动不是更好吗(没有鼠标移动,没有按键,没有点击)?我不知道如何检查这一点。但是如果你能给我一个想法,那会更好,因为这就是我试图做的。如果最主要的原因是客户端的一些事情(例如破坏cookie),你可能会想要一个Javascript解决方案(就我个人而言,我不喜欢这样做,因为客户端Javascript可以被用户伪造)。如果这是您想要实现的服务器端内容,请选择服务器端会话销毁。或者两者兼而有之……我更喜欢服务器端,尽管b/c更安全:在php代码中记录用户活动,如果活动(post/get等),只需踢用户(销毁会话)时间>最大用户空闲时间。看一看例子。有很多解决方案,所以:)