【问题标题】:JavaScript code for cookie not working in Chromecookie 的 JavaScript 代码在 Chrome 中不起作用
【发布时间】:2013-03-01 09:46:17
【问题描述】:

以下代码在 FF 中运行良好:

var date = new Date();
date.setTime(date.getTime() + (1 * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toGMTString();
document.cookie = "c_odi" + "=" + $('#orderdetailid').val() + expires + "; path=/";

但不是在 Chrome 中。当我使用 Chrome 并在控制台中执行 document.cookie 以查看 cookie 时,c_odi cookie 不存在。但是当我在FF中做同样的事情时,它就是。我们如何使 cookie 在 Chrome 中工作? PHP 添加的 cookie 没问题,但 JavaScript 中没有这个,此时我确实需要通过 JavaScript 添加这个 cookie。

【问题讨论】:

    标签: javascript google-chrome cookies


    【解决方案1】:

    如果您以file:///C:/.../xxx.html 而不是http:// localhost/xxx.html 打开您的代码,则可能会出现此问题。在file:// 的情况下,Chrome 不会保存 cookie(因为没有域,也没有 http 通信)。

    几个感兴趣的链接:

    【讨论】:

    • 为什么只有 Chrome 要求你保存带有域和 http 通信的 cookie,而 IE 和 Edge 不需要。
    • @ds_secret:我在 IE8 中对此进行了测试,它的行为方式与 Chrome 相同 - 在“file://”上它确实保存 cookie,而在“ http://”确实如此。另一方面,FF 似乎对此有一些解决方法,它甚至将 cookie 保存在“file://”上。
    • 是否有解决方法,因为我的大多数“客户”使用 Chrome,而不是 Edge、IE 或 Firefox?
    【解决方案2】:

    Chrome 不会存储从本地文件系统加载的页面中的 cookie。例如,如果您从本地文件系统(例如:file:///C:/Users/deepak.r/Desktop/test.html)访问 chrome 浏览器中的 HTML 文件,则不支持 cookie。

    【讨论】:

    • 你应该详细说明,这是一个非常弱的答案。
    【解决方案3】:

    尝试替换这一行:

    document.cookie = "c_odi" + "=" + $('#orderdetailid').val() + expires + "; path=/";
    

    用这个:

    document.cookie = "c_odi" + "=" + escape($('#orderdetailid').val()) + expires + "; path=/";
    

    当您尝试读取值时,您必须使用unescape,但到时候您会使用 :)

    【讨论】:

    • orderdetailid 的值只是一个整数。
    • 以防万一:) 你的 Chrome 浏览器中启用了 cookie 吗?
    【解决方案4】:

    似乎它对我有用:

    http://jsfiddle.net/rQEnF/3/

    正如您所见,至少 cookie 会显示在开发工具中。但是,如您所见,我将 jQuery 选择器 $('#orderdetailid').val() 替换为常量值。该值或包含该值的元素是否有问题?

    【讨论】:

    • 确认这在 Chrome 25 中也适用于我。即使我将$('#orderdetailid').val() 保留为undefined,它仍然有效。
    • 嗯这很奇怪,那么在 Chrome 中是如何访问 cookie 的呢?当我转到“控制台” - 左侧的最后一个选项(不是资源)时,然后当我键入 document.cookie 时,cookie 不存在。我对你链接到的小提琴做了同样的事情,但是虽然它在Cookies > fiddle.jshell.net 下,但在document.cookie 下却没有。尝试在控制台中输入:alert(document.cookie);
    • 这可能是跨站问题。在 JSFiddle 示例中,设置 cookie 的脚本是从 fiddle.jsshell.net 加载的。因此,也为此域设置了 cookie。在开发控制台中键入 document.cookie 时,您只会看到域 jsfiddle.net 的 cookie。这也可能是您的方案的问题吗? IE。创建 cookie 的脚本的域和它应该使用/读取的域必须相同。
    • 当您执行document.cookies 时,它会显示您所在域的cookie,即jsfiddle.net,您在小提琴上编写的代码在fiddle.jshell.net 托管的iframe 中运行,因此它不会出现在document.cookie。查看适当位置下的资源,您可以看到它工作正常。
    【解决方案5】:

    确保您的地址栏网址与域匹配。在 Chrome 中,如果您设置 domain=www.site.com,然后在浏览器中测试您的页面,则缺少 www。它不会工作。

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多