jQuery检测cookie已启用

use*_*304 21 cookies jquery

我有一个基于jQuery的网络应用程序.我的要求非常简单:我想使用jQuery来确定用户是否在其Web浏览器中启用或禁用了cookie.我知道有一个可用的插件可用于创建/检索/删除/更新cookie.但是,有没有一种方法可以检测用户代理的设置?

Sar*_*raz 40

你不需要jQuery,你可以使用vanilla Javascript:

function are_cookies_enabled()
{
    var cookieEnabled = (navigator.cookieEnabled) ? true : false;

    if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled)
    { 
        document.cookie="testcookie";
        cookieEnabled = (document.cookie.indexOf("testcookie") != -1) ? true : false;
    }
    return (cookieEnabled);
}
Run Code Online (Sandbox Code Playgroud)

http://sveinbjorn.org/cookiecheck

  • 2行代码最多6行.jQuery解决了跨浏览器的不兼容问题,并且经过了许多开发人员的广泛测试.http://stackoverflow.com/a/2031653/59087 (18认同)
  • 比6行JS容易吗? (17认同)
  • @johntrepreneur:您的意思是您不必跨多个浏览器测试jQuery解决方案?嗯,显然我一直在做错了.当然,你可以使用jQuery(尽管Dave Jarvis断言它的"2行"实际上应该是"2行加上95行jQuery插件"),但添加一个jQuery插件只是为了测试cookie是否启用是我用我的一个团队成员打了一个Javascript:The Good Parts for doing. (6认同)
  • @Scottie,它不是那么多行,而是你获得的跨浏览器兼容性,这意味着你不必花费更多的时间在不同的浏览器上测试这个解决方案. (4认同)

Jos*_*ltz 6

Internet Explorer(至少版本10)始终返回true navigator.cookieEnabled.这是解决此问题的方法:

function areCookiesEnabled() {
    var cookieEnabled = navigator.cookieEnabled;

    // When cookieEnabled flag is present and false then cookies are disabled.
    if (cookieEnabled === false) {
        return false;
    }

    // try to set a test cookie if we can't see any cookies and we're using 
    // either a browser that doesn't support navigator.cookieEnabled
    // or IE (which always returns true for navigator.cookieEnabled)
    if (!document.cookie && (cookieEnabled === null || /*@cc_on!@*/false))
    {
        document.cookie = "testcookie=1";

        if (!document.cookie) {
            return false;
        } else {
            document.cookie = "testcookie=; expires=" + new Date(0).toUTCString();
        }
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

  • 请告诉我,为什么我们需要写成`(cookieEnabled === null ||/*@ cc_on!@*/false)`"|| false" (3认同)

ste*_*ang 5

最简单的方法是检查navigator包含浏览器信息的's 属性。参考

您可以使用navigator.cookieEnabled === true来检测浏览器对 cookie 的支持。