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

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();

当我将它添加到我所有控制器的所有函数中时,上面的代码有效。 但是我需要一个单页代码。

将此代码放在通用或配置 php 文件中

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

您可以使用

设置会话参数

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

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

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

        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();