检查Javascript中是否存在httponly cookie

时间:2012-02-19 21:54:19

标签: javascript cookies httponly

正如问题所说,如果它是HttpOnly,你能否知道Javascript中是否存在cookie?我不需要访问其中的信息,只知道它有一个。

关于这种情况的更多信息是,最初有一个使用cookie作为身份验证令牌的Web服务器,并且它被设置为httponly,因为它没有被客户端使用,因此它被添加到安全性中。

但是现在需要进行更改,客户端需要知道它是否有cookie(因为该站点可以在没有用户登录的情况下工作,但如果他们已登录(auth cookie将存在),则该站点需要显示某些东西并隐藏他人。

Web服务器上还有其他安全预防措施,因此在客户端具有不正确的身份验证cookie的情况下没有任何损害,但该网站使其看起来像是已登录,因为它会删除cookie和拒绝用户。

4 个答案:

答案 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 Unauthorized403 Forbidden,则说明该cookie可能不存在,您可以提示用户登录。

另一方面,如果cookie存在,它将由浏览器自动发送并产生200 OK响应。