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

时间:2015-02-06 08:36:04

标签: php session-timeout

我的网站需要会话超时。

当我在所有控制器的所有功能中添加它时,我的当前代码有效。

有没有办法只写一次并将其包含在所有控制器中?

-in配置文件,包含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();

当我在所有控制器的所有功能中添加此代码时,上面的代码可以正常工作。 但我需要一个页面代码。

3 个答案:

答案 0 :(得分:1)

你需要在破坏之前启动会话

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

        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。它应该工作,我在我的localhost上测试它

修改

要排除登录页面,请使用以下代码 假设您的登录页面网址包含“登录”,请根据您的登录页面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();

答案 1 :(得分:0)

将此代码置于通用或配置php文件

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

答案 2 :(得分:0)

您可以使用

设置会话参数

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