Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.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 PHP自动注销,无需单击_Javascript_Php_Html_Xampp - Fatal编程技术网

Javascript PHP自动注销,无需单击

Javascript PHP自动注销,无需单击,javascript,php,html,xampp,Javascript,Php,Html,Xampp,我试图在php应用程序中实现一个自动注销,在用户处于非活动状态10秒或更长时间之后。我的代码一切正常,唯一的问题是要进行注销,用户必须再次单击屏幕。我想提醒消息和注销发生自动没有任何点击。以下是我的代码片段: if (isset($_SESSION['last_action'])) { //Figure out how many seconds have passed //since the user was last active. $secondsInactive

我试图在php应用程序中实现一个自动注销,在用户处于非活动状态10秒或更长时间之后。我的代码一切正常,唯一的问题是要进行注销,用户必须再次单击屏幕。我想提醒消息和注销发生自动没有任何点击。以下是我的代码片段:

if (isset($_SESSION['last_action'])) 
{
    //Figure out how many seconds have passed
    //since the user was last active.

    $secondsInactive = time() - $_SESSION['last_action'];    


    //Convert our minutes into seconds.

    $expireAfterSeconds = 10;   


    //Check to see if they have been inactive for too long.
    if($secondsInactive >= $expireAfterSeconds){
        //User has been inactive for too long.
        //Kill their session.
        echo "<script>
        alert('You have been logged out');
        window.location.href='../clinician/logout.php';
        </script>";   
    }
}
if(isset($\u会话['last\u action']))
{
//计算过了多少秒
//由于用户上次处于活动状态。
$secondsInactive=time()-$\会话['last\ u action'];
//把我们的分钟转换成秒。
$expireAfterSeconds=10;
//检查它们是否长时间处于非活动状态。
如果($secondsInactive>=$expireAfterSeconds){
//用户处于非活动状态的时间太长。
//终止他们的会话。
回声“
警报(“您已注销”);
window.location.href='../clinician/logout.php';
";   
}
}

您只需调用javascript中每隔一段时间运行的函数

<script language='javascript'>
  var timeout = 10 * 1000; // 10 seconds
  var lastAction = <?php echo isset($_SESSION['last_action']) ? $_SESSION['last_action'] : time();?>;
  setInterval(function(){
     var now = new Date();
     if (typeof lastAction !=='undefined' ){
         if(now.getTime() - lastAction >= timeout ){
            alert('You have been logged out');
            window.location.href='../clinician/logout.php';
         }
     }
  }, 1000) // repeat every 1 second;
</script>

变量超时=10*1000;//10秒
var lastAction=;
setInterval(函数(){
var now=新日期();
如果(上次操作的类型!=='undefined'){
if(now.getTime()-lastAction>=超时){
警报(“您已注销”);
window.location.href='../clinician/logout.php';
}
}
},1000)//每1秒重复一次;
你也可以选择将你的时间间隔设置为10000(10秒),不需要经常检查。一旦达到10秒,它将注销

但我想你也会希望,如果用户移动鼠标或单击某个东西,它不应该将他们注销,因为他们在页面上处于活动状态。如果是,在setInterval函数之后,可以添加

<script language='javascript'>
  var timeout = 10 * 1000; // 10 seconds

  var lastAction = <?php echo isset($_SESSION['last_action']) ? $_SESSION['last_action'] : time();?>;
  var timer = function(){
     return setInterval(function(){
        var now = new Date();
        if (typeof lastAction !=='undefined' ){
          if(now.getTime() - lastAction >= timeout ){
             alert('You have been logged out');
             window.location.href='../clinician/logout.php';
          }
        }
      }, 1000) // repeat every 1 second;
  }
  window.onmousemove = function(e){
   clearInterval(timer);
   timer();   
  }
  window.onclick= function(e){
    clearInterval(timer);
    timer();
  }

  // and make initial call
  timer();
</script>

变量超时=10*1000;//10秒
var lastAction=;
变量计时器=函数(){
返回setInterval(函数(){
var now=新日期();
如果(上次操作的类型!=='undefined'){
if(now.getTime()-lastAction>=超时){
警报(“您已注销”);
window.location.href='../clinician/logout.php';
}
}
},1000)//每1秒重复一次;
}
window.onmousemove=函数(e){
清除间隔(计时器);
定时器();
}
window.onclick=函数(e){
清除间隔(计时器);
定时器();
}
//打个电话
定时器();

您需要在Javascript中为此设置一个计时器。这可以通过使用
setInterval()
函数使用JavaSciprt轻松完成。Php是一种服务器端编程语言,只执行一次。要在网站会话期间自动进行,您必须使用javascript。这是一个有用的答案。我本想写一个同样的答案,但我的网络不见了:我把你的帮助答案投了上去。太棒了!谢谢,我正在使用相同的代码,但它在某个时间后注销(我已设置InInterval)。如何在会话变量中再次添加最新时间?如果客户端空闲10秒,它将注销。这就是目的。您可以增加超时值以使其保持更长的时间。