拥有authComponent时,sessionFilter()中没有设置会话

时间:2014-10-23 12:38:01

标签: php session cakephp

我的CakePHP应用程序中存在一个问题,即我的AppController beforeFilter()函数中没有可用的Session对象,但只有当我在其中有Auth Component时。我有以下代码来设置网站的语言:

public function beforeFilter() {
    $this->_setLanguage();
    $locale = Configure::read('Config.language');
    $path = APP . 'View' . DS . $locale . DS . $this->viewPath;
    if ($locale && file_exists($path)) {
        $this->viewPath = $locale . DS . $this->viewPath;
    }
}

protected function _setLanguage() {
    if (!$this->Session->check('Config.language')) {
        $langLetters = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : 'en';
        $browserLanguage = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
        switch ($browserLanguage){
            case "en":
                $this->Session->write('Config.language', 'en');
                break;
            case "pt":
                $this->Session->write('Config.language', 'pt');
                break;
            default:
                $this->Session->write('Config.language', 'en');
        }
    }
    Configure::write('Config.language', $this->Session->read('Config.language'));
}

问题是,当我添加:

public $components = array('Auth');

我收到以下错误:

Fatal error: Call to a member function check() on a non-object in /home/brasilgameshow/www/teste_credenciamento/app/Controller/AppController.php on line 73

这是_setLanguage()函数的第一行。这意味着当Auth组件存在时,我根本就没有Session对象。任何人都可以提出一个不会影响Auth组件安全性的解决方法吗?我的意思是,只有在没有设置的情况下初始化新会话才是一个好的解决方案?

2 个答案:

答案 0 :(得分:2)

默认情况下,如果您不添加任何组件,CakePHP将加载其默认组件(会话)

当您尝试调用自己的组件数组(在本例中使用Auth)时,您应该包含您可能需要的所有其他组件

答案 1 :(得分:0)

解决方案

当Ayman指出评论时,在AppController中添加自己的组件数组时,需要包含Session!谢谢!