2015-08-28 78 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对象尚未定义,则无法加载它。 –