2012-07-31 119 views
4

從我的應用程序註銷後,當我按下後退按鈕時,用戶的所有登錄選項仍顯示在頁面上。PHP Codeigniter在我註銷後按下後退按鈕時顯示緩存

我登錄後,當我按下後退按鈕時,它將顯示頁面的註銷版本。

我試着在我註銷控制器

function logout() { 
    $this->output->set_header('cache-Control: no-store, no-cache, must-revalidate'); 
    $this->output->set_header("cache-Control: post-check=0, pre-check=0", false); 
    $this->output->set_header("Pragma: no-cache"); 
    $this->output->set_header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
    $this->tank_auth->logout(); 
    redirect(subdomain() . 'home'); 
} 

設置這一點,但緩存仍然存在,當我按下後退按鈕。我怎樣才能解決這個問題?

----- UPDATE ------

我覺得緩存是不是問題就在這裏,在開發商設置鉻我禁用緩存,但註銷後,當我的瀏覽器仍然要受保護的頁面我按下後退按鈕。

所以緩存是沒有問題..

+0

我無法找到源,所以我可能是錯的,但如果我沒有記錯的有問題/錯誤,其中高速緩存控制頭未發送正確地通過輸出類並使用標準的'header()'函數來解決問題。 – 2012-07-31 17:10:54

+0

這與緩存無關 - 在大多數瀏覽器中,後退按鈕不會刷新頁面,只會顯示歷史記錄中的頁面。 – Matt 2012-07-31 17:12:56

+0

你好,我試圖登出Facebook並按下後退按鈕,它顯示主註冊Facebook頁面。 Facebook如何設法做到這一點,如果它只顯示您的歷史記錄頁面? – 2012-07-31 17:15:21

回答

6

您好抱歉說緩存不是問題。緩存是問題!我通過將這段代碼放在codeigniter的index.php文件中解決了這個問題。

header("Expires: Thu, 19 Nov 1981 08:52:00 GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
+0

最好的方法是讓一個基礎控制器(MY_Controller擴展CI_Controller)並在MY_Controller的構造函數中添加$ this-> output-> set_header。然後任何控制器擴展MY_Controller – 2014-08-06 14:17:43

0

閱讀此,我認爲它非常有用的,你

https://ellislab.com/codeigniter/user-guide/libraries/caching.html

https://ellislab.com/codeigniter/user-guide/database/caching.html

,並嘗試這個

$this->cache->clean(); 

$this->db->cache_delete_all(); 
+0

你好,我試過這個,但它不工作.. – 2012-07-31 17:36:00

+1

我認爲緩存不是問題在這裏, 我在開發人員設置中禁用鉻中的緩存,但我註銷後,我的瀏覽器仍然會登錄到受保護的頁面,當我按回按鈕。 所以緩存不是問題。 – 2012-07-31 18:00:08

1

只是添加到您的控制器

public function __construct() 
     { 
      parent::__construct(); 

      $this->output->set_header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT'); 
      $this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate'); 
      $this->output->set_header('Cache-Control: post-check=0, pre-check=0',false); 
      $this->output->set_header('Pragma: no-cache'); 
    }