正如问题所说,如果它是HttpOnly,你能否知道Javascript中是否存在cookie?我不需要访问其中的信息,只知道它有一个。
关于这种情况的更多信息是,最初有一个使用cookie作为身份验证令牌的Web服务器,并且它被设置为httponly,因为它没有被客户端使用,因此它被添加到安全性中。
但是现在需要进行更改,客户端需要知道它是否有cookie(因为该站点可以在没有用户登录的情况下工作,但如果他们已登录(auth cookie将存在),则该站点需要显示某些东西并隐藏他人。
Web服务器上还有其他安全预防措施,因此在客户端具有不正确的身份验证cookie的情况下没有任何损害,但该网站使其看起来像是已登录,因为它会删除cookie和拒绝用户。
答案 0 :(得分:6)
没有。请参阅下面Rob的评论。
请参阅此内容,您可能已经看过了 - http://en.wikipedia.org/wiki/HTTP_cookie#Secure_and_HttpOnly
无法通过非HTTP方法访问HttpOnly cookie,例如 通过JavaScript调用(例如,引用“document.cookie”)...
编辑:删除了undefined
回复,我写了一个你可能没有使用的脚本:)
答案 1 :(得分:5)
如果无法设置,则可以通过尝试将其设置为使用javascript的值来间接检查是否存在,然后必须存在HTTP Only Cookie(或者用户阻止cookie)。
function doesHttpOnlyCookieExist(cookiename) {
var d = new Date();
d.setTime(d.getTime() + (1000));
var expires = "expires=" + d.toUTCString();
document.cookie = cookiename + "=new_value;path=/;" + expires;
if (document.cookie.indexOf(cookiename + '=') == -1) {
return true;
} else {
return false;
}
}
[2018年2月6日更新]这在firefox上无效(适用于Chrome& Edge,也许还有其他人)
答案 2 :(得分:1)
我有同样的问题。我通过在服务器每次刷新httponly会话cookie时设置另一个cookie(而不是httponly)来解决该问题,该cookie的max-age相同且没有敏感数据。现在,如果其中一个存在,则另一个也是如此,客户端可以知道httponly对应项是否存在。
答案 3 :(得分:0)
无论何时需要检查cookie是否存在,都可以向需要身份验证的服务器发送请求并检查响应。如果它类似于401 Unauthorized
或403 Forbidden
,则说明该cookie可能不存在,您可以提示用户登录。
另一方面,如果cookie存在,它将由浏览器自动发送并产生200 OK
响应。