如何在所有控制器中包括会话超时


How to include Session Timeout in all controllers?

我的网站需要一个会话超时。

当我将当前代码添加到所有控制器上的所有函数中时,它就能工作。

有没有一种方法可以只写一次并将其包含在所有控制器中?

-在配置文件中,URL为&会话检查吗?


我的代码工作:

if(isset($_SESSION['timeout']) && $_SESSION['timeout'] + 4 < time()) //4 seconds
{
 session_destroy();
 echo "<script>
 alert('Session Timed Out.');
 </script>";
 ?>  <script> window.location ="<?php echo URL;?>"; </script>  <?php
}
$_SESSION['timeout'] = time();

当我在所有控制器的所有函数中添加这个时,上面的代码就可以工作了。但我需要一个单页代码。

您需要先启动会话,然后才能销毁它

在配置文件中使用以下代码

        session_start();
        if(isset($_SESSION['timeout']) && $_SESSION['timeout'] + 4 < time()) //4 seconds
        {
            session_destroy();
            echo "<script>
         alert('Session Timed Out.');
         </script>";
            ?>  <script> window.location ="<?php echo URL;?>"; </script>  <?php
        }
        $_SESSION['timeout'] = time();

并从控制器文件中删除session_start。它应该可以工作,我在本地主机上测试了它

编辑

要排除登录页面,请使用以下代码假设您的登录页面url包含"login",则根据您的登录页url 修改$string

        $string = "login";
        $url =  $_SERVER['REQUEST_URI'];
        session_start();
        if(isset($_SESSION['timeout']) && $_SESSION['timeout'] + 4 < time() && !strpos($url, $string)) //4 seconds
        {
            session_destroy();
            echo "<script>
                 alert('Session Timed Out.');
                 </script>";
            ?>  <script> window.location ="<?php echo URL;?>"; </script>  <?php
                }
                $_SESSION['timeout'] = time();

将此代码放在公共或配置php文件中

<?php
  if ($_SESSION['timeout'] + 10 * 60 < time()) {
       // session timed out
 } else {
      // session ok
  }
?>

您可以使用设置会话参数

session_set_okie_paramshttp://php.net/manual/en/function.session-set-cookie-params.php