【问题标题】:Why document.cookie is not working为什么 document.cookie 不起作用
【发布时间】:2011-10-10 03:08:53
【问题描述】:
  var curCookie = name + "=" + value +
    "; expires=" + ATS_getExpire()  +
    "; path=" + path  +
    "; domain=" + domain  ;     
document.cookie = curCookie;
alert("Your Cookie : " + document.cookie);

当我使用上述代码时,警报消息为空。为什么 document.cookie 是空的。 请任何人回答。

【问题讨论】:

标签: javascript


【解决方案1】:

在这里查看Live Example

您使用的是; 而不是,

使用, 来区分您的 cookie 值

var curCookie = name + "=" + value + 
    ", expires=" + ATS_getExpire() + 
    ", path=" + path + 
    ", domain=" + domain;

document.cookie = curCookie;
alert("Your Cookie : " + document.cookie);

更新

截至今天(2021-08-25),实时示例在不同浏览器中并不一致:

  • 铬 92.0.4515.159:❌
  • 边缘 92.0.902.78:❌
  • 歌剧 77.0.4054.277:❌
  • Firefox 91.0.2:✅

【讨论】:

  • 有人能解释一下为什么这样更好吗? MDN 使用';'
  • 它不适用于 document.cookie = "vcrcjode=118b11a9b3, expires=Sat, 02 Nov 2013 21:23:59 GMT, path=/";
  • 我认为这样做会使所有这部分的价值,所以你不再设置过期、路径和域属性;您只是在设置一个包含这些字符串的值。至少当我尝试 Chrome 的开发工具时,它是这样向我展示的。
  • 这是错误的,你在 a 之后设置了所有这些,因为值而不是设置过期,路径也不是域。
  • 现场示例不适用于 Chrome 92.0.4515.159。
【解决方案2】:

我发现......令人沮丧的是,在浏览器中本地运行页面时,document.cookie 不起作用。

当我将同一页面上传到网站时,突然间所有 cookie 值都正常工作。我会找出原因并稍后填写此答案的其余部分。

【讨论】:

  • 可能是您在 localhost:3000 上的开发服务器中运行页面吗?白色您正试图联系 localhost:80 上的后端或其他什么?浏览器将此视为跨域。
  • 如果您的 localhost SSL 证书无效,您也可能会遇到 cookie 问题。
【解决方案3】:

如果页面托管在public suffix list 上列出的域上(例如 github.io、cloudfront.net),有时可能会发生这种情况。这些域由浏览器特殊处理,并出于安全原因限制写入 cookie。

【讨论】:

    【解决方案4】:

    尝试使用 jQuery Cookie 插件:

    jQuery Cookie plugin

    $.cookie('the_cookie', 'the_value', { expires: 7, path: '/' });
    

    【讨论】:

      猜你喜欢
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 2013-03-07
      相关资源
      最近更新 更多