【问题标题】:How to delete a cookie for real?如何真正删除cookie?
【发布时间】:2014-02-12 05:23:45
【问题描述】:

我已经成功地在 IE 中破坏了我的 cookie 字符串,现在看起来像这样:

"; __atuvc=4%7C7; PHPSESSID=e4db10eb5d4409ba3203a7c1d533fafd; PHPSESSID=75a04bdcf604dd607d383da774c0f72a; __utmc=51433896; __utma=51433896.100703801.1392175783.1392175783.1392178863.2; __utmb=51433896.5.10.1392178863; __utmz=51433896.1392175783.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __atuvc=3%7C7"

这是在 IE11 开发者栏中输入document.cookie 的输出。

您会注意到PHPSESSID 出现了两次。我想杀了它。

我尝试在 JavaScript 中运行它:

document.cookie = 'PHPSESSID=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';

并在 PHP 中运行:

session_start();
setcookie('PHPSESSID', '', time()-3600); 
setcookie('PHPSESSID', '', time()-3600, '/'); 
session_unset();
session_destroy();

但似乎没有什么能摆脱 cookie。

我知道我可以通过浏览器手动删除 cookie,但是一大群用户现在都在搞乱会话,我需要一种方法来自动删除。

【问题讨论】:

  • 如果 var_dump($_COOKIE) 你有什么?
  • var_dump($_COOKIE) 只会输出一次PHPSESSID,因为它是一个键值字典。但它肯定存在两次,因为它会阻止用户登录。也可以通过$_SERVER['HTTP_COOKIE'] 看到。
  • 到目前为止,我发现的唯一解决方案是要求用户关闭浏览器(将清除会话长度的 cookie)或按 Ctrl+Shift+Del 并手动删除它们。

标签: javascript php


【解决方案1】:

当您删除一个 cookie 时,您必须像设置它时一样指定 cookie 参数。您可以使用session_get_cookie_params 函数获取当前会话cookie的参数

$params = session_get_cookie_params();
setcookie(
    session_name(), '', time() - 86400, 
    $params['path'], 
    $params['domain'],
    $params['secure'],
    $params['httponly']
);

session_destroy();

【讨论】:

    猜你喜欢
    • 2013-04-07
    • 2018-05-20
    • 1970-01-01
    • 2013-04-04
    • 2011-01-09
    • 2015-02-24
    相关资源
    最近更新 更多