【问题标题】:Clearing a cookie via JS and yet PHP still detects it通过 JS 清除 cookie 但 PHP 仍然检测到它
【发布时间】:2019-03-16 17:43:52
【问题描述】:

我正在通过 JS 设置“SESSION”cookie:

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:

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

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

另一方面,我正在通过 PHP 进行会话检查,尝试通过执行 $_COOKIE["SESSION"] 来读取 cookie。

isset($_COOKIE["SESSION"]) 将返回 true,我可以读取 cookie 的旧值。无论我刷新页面多少次,它仍然会读取它。

我是否误解了 cookie 的工作原理?在 PHP 中是否有其他方法可以检查 cookie 是否已过期?

更新: 是的,问题在于 cookie 有一个 HttpOnly 标志。

所以现在我试图通过 PHP 删除它。基于其他question,我这样做:

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

当我完成后,我用一个快速的var_dump($_COOKIE) 检查它是否消失了,是的,它无处可寻。

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

我将添加一条额外的信息,以防有所不同:此 cookie 由 sub.domain.com 和 app.sub.domain.com 共享。当我设置它时,我将它设置为 .domain.com。我也为 .domain.com 取消了设置。

我怎样才能永远摆脱那个 cookie?

【问题讨论】:

  • 既然您标记为 php,请使用错误报告并检查您的控制台是否有 JS 内容。不过这里没有php。
  • $_COOKIE["SESSION"] 是 PHP,它的 var_dump() 将返回过期会话 cookie 的值。
  • 我已经读了好几遍了,在编辑之后,我无法理解它。看看this answer 看看是否有帮助。以及检查 cookie 是否等于 JS/PHP 中的内容。但是您说 "isset($_COOKIE["SESSION"]) 将返回 true"。目前尚不清楚您如何使用它以及它是否在条件语句中。如果不是,那么您发布和可能使用的内容将始终返回 true。另见this Q&A

标签: javascript php cookies


【解决方案1】:

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

无论哪种方式,它都可能是使用 cookie 安全设置生成的,这些设置限制了从 JavaScript 对其的访问。此设置称为httpOnly,通常用于会话 cookie 和其他仅供服务器端代码使用的类似 cookie 数据。

如果已设置此 cookie 设置(并且任何好的会话处理程序都会设置它),那么您将无法从浏览器设置或取消设置此 cookie;您必须从您的 PHP 代码中完成。

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

【讨论】:

  • 是的,问题实际上是那个标志!谢谢!我正在写更新,因为即使通过 PHP,我仍然遇到问题。
  • 回应您的更新:如果这是PHP会话cookie,您为什么不使用PHP的会话函数来杀死它?对session_destroy() 的简单调用应该可以解决问题。 (如果您通过框架使用其他会话处理程序,它可能具有类似的功能)
猜你喜欢
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多