【问题标题】:How to test whether a browser accepts cookies with JavaScript?如何测试浏览器是否接受带有 JavaScript 的 cookie?
【发布时间】:2010-07-22 23:40:57
【问题描述】:

我想用 JavaScript 测试浏览器是否支持 cookie。以下code 适用于 Internet Explorer 8 和 Firefox 3.6,但不适用于 Google Chrome 5。

function areCookiesEnabled() {
  document.cookie = "__verify=1";
  var supportsCookies = document.cookie.length > 1 &&
                        document.cookie.indexOf("__verify=1") > -1;
  var thePast = new Date(1976, 8, 16);
  document.cookie = "__verify=1;expires=" + thePast.toUTCString();
  return supportsCookies;
}

if(!areCookiesEnabled()) 
    document.write("<p>Activate cookies!</p>");
else
    document.write("<p>cookies ok</p>");

Chrome 显示消息“激活 cookie!”无论我的 cookie 设置如何。但如果我禁止 cookie,Chrome 会告诉我无法设置 cookie。

知道如何在 Chrome 中使用 JavaScript 测试 cookie 的可用性吗?

【问题讨论】:

  • 它在 Chrome 5 中运行良好(在 Windows 7 上运行)。
  • 我也在 Windows 7 上运行 Chrome 5,但它不起作用!

标签: javascript cookies google-chrome


【解决方案1】:

判断 cookie 是否启用的唯一可靠方法是设置一个,然后在下一个请求时检查其存在。需要服务器端代码。

【讨论】:

  • 我对 Chrome 的脆弱 cookie 处理感到好奇,因此在服务器端实现了一个 cookie 测试。
【解决方案2】:

我不确定为什么代码不起作用,但您确实可以简化代码,这将有助于解决问题:

function areCookiesEnabled() {
  document.cookie = "__verify=1;expires=" + new Date(1976, 8, 16).toUTCString();
  return  (document.cookie.length > 1);
}

if(!areCookiesEnabled()) 
    document.write("<p>Activate cookies!</p>");
else
    document.write("<p>cookies ok</p>");

另外,这是一个excellent overview of Javascript cookies,它可能会帮助您确定它。

【讨论】:

  • 那行不通,因为(至少)Firefox 不接受过期的 cookie。顺便说一句:为什么是document.cookie.length &gt; 1 而不是&gt;=
  • 为什么要将到期日期设置为过去? (最初没有注意到)。您指定的测试长度无关紧要,因为您正在测试它是否等于 '__verify=1' 这比 1 字符多得多;)
  • 我认为document.cookie.length 是可用cookie 的数量。设置为过去就是在测试后去掉cookie。
猜你喜欢
  • 2011-10-21
  • 2018-07-22
  • 2019-11-09
  • 2011-12-04
  • 2015-11-24
  • 1970-01-01
  • 2019-11-23
  • 2016-11-03
  • 1970-01-01
相关资源
最近更新 更多