【发布时间】: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