在我的用户控制器中,我试图在登录时记住我的记忆功能。当用户访问登录页面时,为了查找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。而且我确实实现了与上面不同的加密。
我仍然想知道为什么该组件不起作用。
答案 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('/');
}
}
}
这对你有用吗?