2015-02-06 87 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