【问题标题】:php redirect when idle not redirecting空闲时php重定向不重定向
【发布时间】:2020-07-18 09:29:15
【问题描述】:

我在https://thisinterestsme.com/expire-php-sessions 找到了以下脚本。

此代码用于检查用户是否在一段时间内处于非活动状态 注销并直接进入登录屏幕。

问题

不会发生重定向。重定向仅在页面刷新时发生。

脚本

<!-- language: lang-html -->

      <?php  $inactive = 30;
    $_SESSION['inactive']=$inactive;

    if( !isset($_SESSION['timeout']) )
     $_SESSION['timeout'] = time() + $inactive; 

   $session_life = time() - $_SESSION['timeout'];
   $_SESSION['life']=$session_life;

 if  ($session_life > $inactive)
   {  session_destroy();
     echo '<script>';
     echo 'console.log("You have been logged-out!");';
     echo 'window.location.href="login.php"'; 
echo '</script>';
}
$_SESSION['timeout']=time(); 
 ?>

仅当我刷新页面时才会发生重定向

我尝试了header("Location: login.php") 而不是echo 'window.location.href="login.php"',但没有成功(没有自动重定向到“登录”页面)。

我应该怎么做才能重定向页面而不刷新?

我正在使用 PDO+ php 7

我找到了a thread 并尝试了这个:

<meta http-equiv="refresh" content="900;url=login.php" /> 

但这不会检查是否“空闲”。

提前致谢

【问题讨论】:

  • 试过 JQUERY 来自动刷新 DIV(比如#refreshDIV)并检查空闲时间。这行得通。但是程序(login.php)显示在所说的即refreshDIV中。我想在主浏览器中打开...请帮助

标签: header location


【解决方案1】:

我希望分享完整的答案。

  1. 检查是否空闲30秒(15分钟)。如果是(空闲 30 秒)则销毁会话。这是一个代码 sn-p 可以剪切并粘贴到网页顶部:
<?php  

session_start();
 
 if (!isset($_SESSION['loginid']))
    {
    
     header("Location: login.php");
     }

     // store inactive time
        $inactive = 30;
        $_SESSION['inactive']=$inactive;

        if( !isset($_SESSION['timeout']) )
         $_SESSION['timeout'] = time() + $inactive; 

       $session_life = time() - $_SESSION['timeout'];
       $_SESSION['life']=$session_life;

     if  ($session_life > $inactive)
       {  session_destroy();
           unset($_SESSION['loginid']);
           header("Location: login.php");
    }
    $_SESSION['timeout']=time(); 
?>
  1. 检查空闲时间是否超过 30 秒。这是 jQuery 代码(剪切并粘贴到通常与 Include_once("xxxx.php") 一起使用的公共共享文件中。
$(function(){
    function refreshDiv(){
        $.ajax({
            url: 'checkidletime.php'
        }).done(function(result) {
            $('#refreshDIV').html(result);
            window.setTimeout(refreshDiv, 5000);
        });

    }
    window.setTimeout(refreshDiv, 5000);
});
  1. 上述函数 refreshDiv 调用的 Checkidletime.php(包含文件的一部分):
session_start();
      
    $session_life = time() - $_SESSION['timeout'];
      
    if ($session_life > $_SESSION['inactive'] )
    {   unset($_SESSION['loginid']);
     ?>
     <script>
    location.reload();/* refresh page
    </script>
     <?php
       
    } 

【讨论】:

    猜你喜欢
    • 2019-03-05
    • 2012-06-21
    • 2011-08-03
    • 2010-11-03
    • 2011-05-04
    • 1970-01-01
    • 2019-09-15
    • 2018-01-24
    • 2013-09-11
    相关资源
    最近更新 更多