如何检测是不是设置了 httpOnly cookie

Posted

技术标签:

【中文标题】如何检测是不是设置了 httpOnly cookie【英文标题】:How to detect if an httpOnly cookie has been set如何检测是否设置了 httpOnly cookie 【发布时间】:2016-10-27 13:36:19 【问题描述】:

服务器已在浏览器上设置了一个仅限 http 的 cookie uid。我需要找出这个 cookie 是否存在并在我的 javascript 中执行一些操作。我知道只有 http 的 cookie 不能被 javascript 读取。所以我正在考虑设置另一个非http cookie loggedinmaxAge 相同,只要后者是从服务器设置的。两者将一起设置并一起清除。这种方法会奏效吗?这有什么注意事项吗?

【问题讨论】:

你可以从服务器请求它吗? 如何处理登录?如果是通过 React 组件,最好让组件通过检查登录服务的成功或失败来处理这个问题。 @PeeHaa 从服务器请求始终是一种选择。看看能不能避免 @cmbuckley 我正在尝试查看是否必须触发登录服务。如果 cookie 存在,我将避免登录调用。 【参考方案1】:

看看答案here

我的方法是尝试覆盖 cookie,它在 Edge、Chrome 和 Firefox 中都有效(不知道其他浏览器)

这是我使用的代码:

private doesHttpOnlyCookieExist(cookieName: string) 
    var d = new Date();
    d.setTime(d.getTime() + (1000));
    var expires = "expires=" + d.toUTCString();

    document.cookie = cookieName + "=new_value;path=/;" + expires;
    return document.cookie.indexOf(cookieName + '=') == -1;
 

这是解释:

您可以通过尝试使用javascript将其设置为一个值来间接检查它是否存在,如果无法设置,则必须存在HTTP Only Cookie(或用户阻止cookie)。

【讨论】:

以上是关于如何检测是不是设置了 httpOnly cookie的主要内容,如果未能解决你的问题,请参考以下文章

如何将会话 cookie 的 HttpOnly 设置为 false?

在我的 iOS 应用程序中,是不是有任何理由为会话 cookie 设置 HttpOnly 和 Secure 标志?

在 codeigniter 中使用 HTTPOnly 标志设置 cookie

如何为cookie设置HttpOnly

如何在 Flask 中设置 HTTPONLY cookie

求助QAQ chrome要怎么解除cookies的httponly