2015-08-28 55 views
1

我在我的個人CMS上使用codeigniter緩存。問題是,如果用戶登錄管理,我不想顯示緩存頁面。爲登錄用戶禁用Codeigniter的緩存

看到在谷歌這個教程: http://www.badpenguin.org/codeigniter-cache-disable

class MY_Output extends CI_Output { 

    function _display_cache(&$CFG, &$URI) 
    { 
     /* Simple Test for Ip Address */ 
     if ($_SERVER['REMOTE_ADDR'] == NOCACHE_IP) 
     { 
      return FALSE; 
     } 
     /* Simple Test for a cookie value */ 
     if ((isset($_COOKIE['nocache'])) && ($_COOKIE['nocache'] > 0)) 
     { 
      return FALSE; 
     } 
     /* Call the parent function */ 
     return parent::_display_cache($CFG,$URI); 
    } 
} 

是,本次會議是在數據庫(ci_sessions),我不能訪問它裏面MY_Output問題。

使用:

$CI =& get_instance(); 
$CI->session->userdata('userID') 

給我:

Class 'CI_Controller' not found in 

由於控制器輸出之前運行,並且會話需要CIcontroller,我唯一可以在數據庫和encription認爲它禁用會話存儲,我不想那麼做。

有人可以告訴我一些嗎?我仍然無法找到解決方案!

謝謝!

+0

嗯,有趣的......如果答案波紋管沒有幫助 - 而不是延長CI類的,這裏是一個有趣的想法:HTTP:/ /goobbe.com/questions/1927427/disable-output-caching-in-codeigniter-for-logged-in-users - 基本上,你可以製作一些類似'預覽'控制器的管理員輸出不會被緩存的地方,所以他可以預覽他所做的更改。這不是完美的解決方案,但它值得嘗試... – sinisake

+0

作爲控制器之前的緩存加載,這不會工作。 –

+0

那麼..唯一的事情我可以做的就是停止使用數據庫來存儲緩存,我認爲... –

回答

0

試試這個:

@$SESS = & load_class('Session', 'libraries/Session'); 

的@是存在的,以防止它抱怨「會話已經開始」。請注意:這是針對CI3的。原始輸出類狀態(線407-409)代碼:

// Note: We use load_class() because we can't use $CI =& get_instance() 
// since this function is sometimes called by the caching mechanism, 
// which happens before the CI super object is available. 
+0

與@,給了我一個空白頁。沒有它,同樣的錯誤,類'CI_Controller'找不到 –

+0

Php5和CI 2.1 –

+1

我發現Session類在她的構造函數中使用get_instance()。如果CI對象尚未定義,則無法加載它。 –