2015-02-06 83 views
0

我需要一个会话超时为我的网站。如何在所有控制器中包含会话超时?

我当前的代码在我将其添加到所有控制器的所有功能中时起作用。

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

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

当我添加这在我的所有控制器的所有功能将上面的代码工作。 但我需要一个页面代码。

回答

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

编辑

要排除登录页面使用下面的代码 假设你的登录页面的URL中包含“登录”,修改$字符串,按您的登录页面的URL

 $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(); 
+0

如何从这种情况中排除我的登录页面? – 2015-02-09 12:48:20

+0

修改了现有的代码来ecluse登录页面 – 2015-02-09 13:05:36

+0

它是否适合你? – 2015-02-09 13:31:56

0

将此代码放在共同或配置PHP文件

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

我试过这个阿伦。此代码仅在我将其添加到所有控制器的所有功能中时才起作用。这在配置中不起作用。 – 2015-02-07 07:05:21

+0

@pradeep你使用任何框架? – Arun 2015-02-07 07:06:48

+0

如上所述简单的MVC – 2015-02-07 07:07:48