为登录用户禁用Codeigniter的缓存

时间:2015-08-28 14:52:50

标签: php codeigniter caching

我在个人CMS上使用codeigniter缓存。问题是,如果用户已登录管理,我不想显示缓存页面。

在google上看到这个教程: 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

由于输出在控制器和会话需要CI控制器之前运行,唯一的东西我可以想到它在数据库和登记上的禁用会话存储,我不想这样做。

有人可以就此给我一些启示吗?我仍然无法找到解决方案!

谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个:

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

@是为了防止它抱怨“会话已经开始”。请注意:这是CI3。原始Output类的代码状态(第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.