CakePHP没有保存我的cookie

时间:2012-01-13 20:16:43

标签: cakephp cookies cakephp-1.3

在我的用户控制器中,我试图在登录时记住我的记忆功能。当用户访问登录页面时,为了查找cookie,可以非常简单地设置cookie查找cookie。如果存在,请将其登录。但是,Cake不保存cookie,至少不是我能看到的,当我重新访问页面时我没有自动登录。

为了测试这个,我有以下代码:

$cookie=$this->read('Auth.User');
if(empty($cookie) and !empty($this->data)){
    if($this->Auth->login()) {
        if(!empty($this->data['User']['remember_me'])){
            $cookie = array('id' => $this->Auth->user('id'),
            );
            $expires=strtotime($this->appConfigurations['remember_me'],time());
            $this->Cookie->write('Auth.User', $cookie, false, $this->appConfigurations['remember_me']);
        }
    }
}

现在我设置这个cookie后,我可以放置一个$ this-> cookie-> read('Auth.User');并获取此Cookie的值,但它不会显示在浏览器(Chrome,FireFox)Cookie列表中。

如果我使用普通的PHP cookie,通过setcookie()我可以看到cookie但当然Cake Cookie读取不适用于那些cookie。我应该寻找什么来解决这个问题?

我确实找到了解决办法,但我不喜欢它,因为它只是绕过了框架。我发现蛋糕是如何创建饼干的,对于这些饼干,我在我的代码中使用蛋糕饼干创建算法,并使用setcookie()进行设置。仅适用于可能需要或需要使用该工作的任何其他人:

$cookieValue=$this->Auth->user('id');
setcookie('CakeCookie[Auth][User]',$cookieValue,$expires,'/');

现在您可以使用cake cookie组件来读取值。如果您的值是数组,则需要更改更多内容,请通读cookie.php代码以查看您需要执行的操作。此外,我遗漏了在cookie.php和您的应用程序设置中也可以找到的加密。对于这个问题,我不需要数组值,因为我只存储用户ID。而且我确实实现了与上面不同的加密。

我仍然想知道为什么该组件不起作用。

1 个答案:

答案 0 :(得分:1)

以下登录操作适用于我:

function login() {
    $cookie = $this->Cookie->read('Auth.User');
    debug($cookie); // Just a test
    if ($this->Auth->user('id')) {
        if(!empty($this->data)) {
            $cookie = array(
                'username' => $this->data['User']['username'],
                'password' => $this->data['User']['password']
            );
            $this->Cookie->write('Auth.User', $cookie, false, '+2 weeks');
        }
        $this->redirect('/');
    }
    elseif (!empty($cookie)) {
        if ($this->Auth->login($cookie)) {
            $this->redirect('/');
        }
    }
}

这对你有用吗?