代码之家  ›  专栏  ›  技术社区  ›  Victoria Ruiz

通过JS清除cookie,而PHP仍然检测到它

  •  0
  • Victoria Ruiz  · 技术社区  · 7 年前

    var d = new Date();
    d.setTime(d.getTime() + (2*24*60*60*1000));
    var expires = "expires="+ d.toUTCString();
    document.cookie = cookie.name + "=" + cookie.value +";"+ expires + "; 
    path="+cookie.path+";domain="+data.shared_domain+";";
    

    然后我通过JS使cookie过期来删除cookie:

    document.cookie = "SESSION=; expires=Thu, 01 Jan 1971 00:00:01 UTC; path=/;domain="+domain;
    

    console.log(document.cookie) 将返回除此之外的所有其他Cookie,这是我所期望的。

    另一方面,我正在通过PHP进行会话检查,试图通过 $_COOKIE["SESSION"] .

    true

    是的,问题是饼干有 HttpOnly 旗帜。

    所以现在我想通过PHP删除它。基于另一个 question

    setcookie("SESSION", "", time()-3600);
    if (isset($_COOKIE['SESSION'])) unset($_COOKIE['SESSION']);
    

    当我做完后,我会快速检查它是否消失了 var_dump($_COOKIE)

    但Chrome仍然可以看到它(1969年过期),当我导航到网站的另一部分时,检查cookie将返回一个值。

    我怎样才能永远摆脱那块饼干?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Spudley Pat    7 年前

    首先不清楚您是如何创建cookie的;我假设使用PHP的会话处理程序,但是您没有指定。

    无论哪种方式,它都可能是通过cookie安全设置生成的,这些设置限制了从JavaScript对它的访问。此设置称为 httpOnly

    如果已经设置了这个cookie设置(任何好的会话处理程序都会设置它),那么您就不能从浏览器中设置或取消设置这个cookie;您必须从PHP代码中进行设置。

    有关此主题的更多信息,请参阅以下维基百科文章: https://en.wikipedia.org/wiki/Secure_cookie