javascript - 通过 JS 清除 cookie 但 PHP 仍然检测到它
问题描述
我正在通过 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"]
.
isset($_COOKIE["SESSION"]) 将返回true
,我可以读取 cookie 的旧值。无论我刷新页面多少次,它仍然会读取它。
我是否误解了 cookie 的工作原理?是否有另一种方法可以检查 cookie 在 PHP 中是否已过期?
更新:是的,问题是 cookie 有一个HttpOnly
标志。
所以现在我试图通过 PHP 删除它。基于this other 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?
解决方案
不清楚你是如何创建 cookie 的。我假设使用 PHP 的会话处理程序,但您没有指定。
无论哪种方式,它都可能是使用 cookie 安全设置生成的,这些设置限制了从 JavaScript 对其的访问。此设置被调用httpOnly
,通常用于会话 cookie 和其他仅供服务器端代码使用的类似 cookie 数据。
如果已设置此 cookie 设置(并且任何好的会话处理程序都会设置它),那么您将无法从浏览器设置或取消设置此 cookie;您必须从您的 PHP 代码中执行此操作。
有关此主题的更多信息,请参阅此维基百科文章:https ://en.wikipedia.org/wiki/Secure_cookie
推荐阅读
- python - 无法在新定义的函数中使用导入的库
- javascript - 如何为单独的 urlthreejs 加载图像
- javascript - React Native:将导航路线作为道具传递给动态呈现的组件
- python - 无法通过 boto3 python 获取 ec2-instance 的公共 IP
- sql - 分两阶段插入表格
- google-cloud-platform - 为什么从 GKE 到 GCP 中的私有 IP 的通信不起作用?
- excel - 如何根据名称匹配的表设置变量?
- python - 由于 ExecutorLostFailure,无法使用 spark 读取镶木地板文件
- oracle - 哪个用户可以在 Oracle 18.4 上执行 SHOW PDBS?
- r - 考虑到另一个标签的后续内容而不是类,如何获取 HTML 元素?