【问题标题】:CakePHP Delete Cookie IssueCakePHP 删除 Cookie 问题
【发布时间】:2011-08-05 01:03:28
【问题描述】:

我浏览过其他人的类似问题,但似乎没有什么与我所经历的完全一样。如果之前已解决此问题,请随时参考我的另一篇文章。

当用户进行身份验证时,我编写了一个 cookie,它在本地存储了一些基本的用户信息。当用户注销时,我试图删除 cookie 变量,但不会删除。如果我使用destroy方法,那么cookie会被删除,但我很好奇我在这里做错了什么:

Cookie 是这样写的并且正在工作:

function login(){
    if($this->Auth->login($this->data)){
        $this->Cookie->write('User.email',$this->data['User']['email'],true, '1 day');
    }
}

但是,使用删除功能不起作用...

function logout(){
    $this->Cookie->delete('User');
    if($this->Auth->logout($this->data)){
        //auto redirected
    }
}

如果我用销毁替换删除,它会起作用。这是因为 cookie 数据被加密而不起作用吗?我可能在做一些愚蠢的事情,但我似乎无法弄清楚。

我正在使用此 cookie 来保持会话。我只想在用户单击注销按钮时将其删除。

谢谢!

【问题讨论】:

  • 我的愚蠢问题 - 我看到你正在写 User.email 并删除用户。现在,我知道如果你有用户,它会删除用户和 User.email,但你确定删除方法可以找到用户吗?我会先看看那里。
  • 根据这篇文章,我应该可以删除 User 变量。 book.cakephp.org/view/1282/Using-the-Component
  • 我不知道这是否是您要查找的内容,但是您可以尝试将 cookie 的到期日期设置为过去,而不是使用 delete。
  • 感谢您的建议,但我不希望 cookie 过期,除非用户强制注销。我已经通过使用 destroy 方法达到了我想要的最终结果,但我很好奇我是如何错误地使用 delete 的。

标签: cakephp cakephp-1.3


【解决方案1】:

查看源代码,这似乎是一个错误或预期行为。

CookieComponent 类有一个内部 __values 数组,用于跟踪 cookie 信息。如果调用 delete('User.email'),它会从 __values 数组中删除 'User' 索引,包括索引下的所有数据。

但是,它只会取消设置名为“用户”的 cookie。下次启动 Cake 时,它​​会看到一个名为 'User.email' 的 cookie 仍然存在,并将其加载回 __values 数组。

假设这不是预期的行为,我写了一个修复程序,我会继续提交给 Cake 团队。

【讨论】:

  • 我假设您在谈论这段代码,对吗? if (strpos($key, '.') === false) { unset($this->__values[$key]); $this->__delete("[$key]");返回;在继续修复中的删除之前,您是否首先检查以该键开头的字符串?然后,如果您发现任何包含该字符串的内容,您是否只是遍历这些值并单独删除它们?只是好奇。如果您有可用的结果,我有兴趣关注错误跟踪以了解结果。我认为你是对的。这一定是一个错误。
  • 将您的答案标记为解决方案。错误与否,这就是原因。感谢您的洞察力!
  • 这是我提交给 Cake 团队的内容,包括一个修复链接。是的,我只是在遍历这些值。 cakephp.lighthouseapp.com/projects/42648-cakephp/tickets/…
  • 这似乎已在 CakePHP 1.3.9 中得到纠正。再次感谢您的帮助。
  • @Scott 真的吗?我仍然得到这个
猜你喜欢
  • 2011-09-05
  • 2011-12-24
  • 1970-01-01
  • 2011-10-03
  • 2011-12-19
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
相关资源
最近更新 更多