【问题标题】:PHP automatic logout without having to clickPHP自动注销而无需点击
【发布时间】:2017-08-13 11:37:48
【问题描述】:

我试图在用户处于非活动状态 10 秒或更长时间后在我的 php 应用程序中实现自动注销。我的代码一切正常,唯一的问题是要进行注销,用户必须再次单击屏幕。我希望警报消息和注销自动发生而无需任何点击。这是我的代码的 sn-p:

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>";   
    }
}

【问题讨论】:

  • 你需要在Javascript中为此设置一个计时器。
  • 这可以通过 JavaSciprt 使用 setInterval() 函数轻松完成。
  • Php 是一种服务器端编程语言,只执行一次。要在网站会话期间自动进行,您必须为此使用 javascript。

标签: javascript php html xampp


【解决方案1】:

你需要做的就是在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>

并且您可以将间隔设置为 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>

【讨论】:

  • 有用的答案。我正要写一个相同的答案,但我的互联网已经消失了:D 我赞成你的帮助答案。
  • 太棒了!谢谢
  • 我使用的是相同的代码,但它在一段时间后退出(我设置了间隔)。如何在会话变量中再次添加最新时间?
  • 如果客户端空闲 10 秒,它将注销。这就是目的。您可以增加超时值以使它们保持更长时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 2017-12-06
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
相关资源
最近更新 更多