首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过JS清除cookie,但PHP仍然可以检测到它

问通过JS清除cookie,但PHP仍然可以检测到它
EN

Stack Overflow用户
提问于 2018-10-11 23:11:06
回答 1查看 47关注 0票数 1

我正在通过JS设置一个"SESSION“cookie:

代码语言:javascript
复制
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,使其过期:

代码语言:javascript
复制
document.cookie = "SESSION=; expires=Thu, 01 Jan 1971 00:00:01 UTC; path=/;domain="+domain;

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

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

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

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

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

所以现在我试着通过PHP删除它。基于另一个question,我这样做:

代码语言:javascript
复制
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取消了它的设置。

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

EN

回答 1

Stack Overflow用户

发布于 2018-10-11 23:46:28

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

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52763495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档