【问题标题】:How to show a message only if cookies are disabled in browser? [duplicate]仅在浏览器中禁用 cookie 时如何显示消息? [复制]
【发布时间】:2011-01-11 03:48:09
【问题描述】:

如何仅在浏览器中禁用 cookie 时显示消息?如 http://stackoverflow.com 显示 JavaScript 是否被禁用。

【问题讨论】:

标签: javascript html xhtml cookies


【解决方案1】:

曾经有一个 JavaScript navigator.cookieEnabled 接口,但今天的浏览器拥有比“启用”/“禁用”更广泛的 cookie 控件更多,包括会话/持久选项,首先 -方/第三方、特定于站点的设置和 P3P。所以现在嗅探这个属性没什么用了。

不,确定是否可以设置 cookie 的唯一可靠方法是尝试设置它,看看它是否仍然存在。另一个问题是,当用户的隐私控制不允许时,许多浏览器会将持久性 cookie 降级为会话 cookie,而 IE 则不会。

如果您在禁用 IE 时尝试在 IE 中设置持久性 cookie,则 cookie 将被简单地扔到地板上。如果您使用简单的会话 cookie 检查器,发现 cookie 已启用,然后尝试设置持久性 cookie,这可能会引起您的注意。而且您无法尝试将其设置为会话 cookie一个持久 cookie,因为当您在禁用持久 cookie 的 IE 中设置持久 cookie 时,它​​甚至会 删除 em> 同名的现有会话 cookie。哦,IE!

因此,如果您需要设置持久性 cookie,但在持久性不可用的情况下使用会话,则必须首先使用它来找出您可以做什么:

// Find out what cookies are supported. Returns:
// null - no cookies
// false - only session cookies are allowed
// true - session cookies and persistent cookies are allowed
// (though the persistent cookies might not actually be persistent, if the user has set
// them to expire on browser exit)
//
function getCookieSupport() {
    var persist= true;
    do {
        var c= 'gCStest='+Math.floor(Math.random()*100000000);
        document.cookie= persist? c+';expires=Tue, 01-Jan-2030 00:00:00 GMT' : c;
        if (document.cookie.indexOf(c)!==-1) {
            document.cookie= c+';expires=Sat, 01-Jan-2000 00:00:00 GMT';
            return persist;
        }
    } while (!(persist= !persist));
    return null;
}

【讨论】:

  • 可能对某人有所帮助:我使用此功能仅向支持持久 cookie 的浏览器显示 jquery #dialog-message(一次)。在我检查支持后,我对对话框 div 进行了 document.write,然后设置了一个 php 查找的 cookie,这样对话框弹出窗口就不会反复惹恼人们。
  • 自 2010 年以来,有人知道 navigator.cookieEnabled 的潜在改进吗?
【解决方案2】:

试试这个:

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);
}

【讨论】:

  • 它适用于所有浏览器吗?
  • 应该,第二次检查(尝试创建 cookie 并查看是否可以检索您尝试设置的值)适用于每个浏览器。第一个检查只是更快地检查该属性是否存储在 DOM 中。 (现代浏览器支持)
  • navigator.cookieEnabled 对于 IE11 总是返回 true ,还有其他方法可以做到这一点吗?我尝试了一段时间,但找不到任何解决方案
【解决方案3】:

stackoverflow.com 使用 <noscript> 标签在 JavaScript 被禁用时显示一个特殊页面。语言中内置的 cookie 没有任何等价物。您最好的选择可能是查看this thread,了解如何检测 cookie 是否被禁用。

【讨论】:

    【解决方案4】:

    首先您测试一下是否启用了 cookie。如果是,则输出一条消息。您可以使用 CSS 隐藏消息,然后在测试后取消隐藏,但如果他们不使用 CSS,用户将看到它。您可以拥有该元素但内部没有任何内容,这样它就不会显示,然后用户 innerHTML 在测试后输入消息。

    假设 cookie 已经设置(或尝试设置)使用:

        var cookieMessage = "You don't have cookies turned on!";
        var cookieHTML = document.getElementById("cookiesOff");
        function cookieMessage() {
        if(document.cookie.length == 0) {
              cookieHTML.innerHTML(cookieMessage);
              }
         }
    

    然后有一个 HTML 元素,例如 h3p,id 为 cookiesOff

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 2019-01-12
      • 2010-09-25
      相关资源
      最近更新 更多