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

时间:2018-10-11 15:11:06

标签: javascript php cookies

我正在通过JS设置“会话” 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的工作原理吗?还有另一种方法可以检查Cookie是否在PHP中过期了吗?

更新: 是的,问题在于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?

1 个答案:

答案 0 :(得分:1)

目前尚不清楚您是如何创建Cookie的;我假设使用PHP的会话处理程序,但您尚未指定。

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

如果已设置此cookie设置(并且任何好的会话处理程序都将对其进行设置),那么您将根本无法从浏览器设置或取消设置此cookie;您将必须通过您的PHP代码来做到这一点。

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