使用JavaScript在本地html文件中设置Cookies

41
我有如下的目录树:
+ folder1
|--- folder2
|------ page1.html
|--- page2.html
如果我在page1.html中使用JavaScript设置了一些cookie,那么该cookie使用的路径是什么? 编辑:
让我更好地解释一下。我正在使用本地文件。 page1.html是通过/home/user/.../folder1/folder2/page1.html访问的,而不是通过客户端机器使用HTTP服务器访问。 只是为了澄清:
似乎有些浏览器(如Chrome)在使用file:///时不存储cookie,但Firefox和Internet Explorer都会存储。

Cookie是独立于创建页面的,"路径"仅由网站域组成。(假设你指的是在浏览器的cookie列表中显示的cookie名称) - Shadow The Spring Wizard
请看我的编辑。我不知道为什么被踩了 :( - Oscar Mederos
抱歉,我以为您没有检查一些基本信息 - 请忽略。 - Shadow The Spring Wizard
有人知道Firefox 57是否已添加了此“功能”吗? 我正在尝试调试一个问题-我的本地脚本在FF中运行正常,直到57,现在似乎会丢失cookie。 FF已经转向不使用本地cookie是我的假设之一。但是,它几乎不可能进行网络搜索;您只会得到关于如何启用/禁用cookie或有关添加cookie管理器的噪音。这个问题是我遇到的最接近的问题。 - Mars
似乎不再可用 https://bugs.chromium.org/p/chromium/issues/detail?id=470482 - Ishan Fernando
6个回答

24

来自MDC页面document.cookie:

如果未指定,则默认为当前文档位置的当前路径。

所以在你的情况下,它将是/folder1/folder2/


我最初没有看到你在问题标题中指定了“本地”,不确定是否在我撰写答案时进行了更新。根据浏览器而定,使用file:///协议浏览时不会设置Cookie。


@Oscar,看我的,离你的大约20像素! - lonesomeday
3
是的,看起来是这样。IE和Firefox使用file:///设置cookie,但Chrome不会这样做 :) 无论如何,我认为您对于IE和Firefox的答案是正确的。 - Oscar Mederos

23

浏览器不能为file:// URL协议存储cookie,它将会完全失败而无声无息地设置任何内容。因此,如果这真的是“本地”的而不是在域上,你可能会遇到问题。


2
看起来是这样的。我在page1.html中设置了一个cookie,然后关闭浏览器,再次打开页面(当然是本地的),然后请求该cookie,它仍然存在:? - Oscar Mederos
2
@Oscar 我认为这是一个跨浏览器的问题。Chrome对于同源策略的解释与Firefox或Internet Explorer有些微不同,特别是在涉及file:///协议时。 - lonesomeday
在我的情况下,它在Firefox 77中可以工作,在Chrome 83上无法工作。两者均在Ubuntu 20上。 - Pouria Moosavi

12

如果您使用的是Mac电脑,您可以这样关闭Chrome并重新启动它:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-file-cookies

然后,您将能够在本地文件上设置cookie。


1
+1:这个方法可行。在终端中使用。我必须删除“--enable-file-cookies”标志上的第二个破折号,所以它应该是这样的:open /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome -enable-file-cookies - FreeAsInBeer
1
这个标志不再起作用,因为该功能已被移除:https://bugs.chromium.org/p/chromium/issues/detail?id=470482 - hwgn

5

为Chrome设置" --enable-file-cookies",就可以解决您的问题。此外,有些功能需要将“接受所有 cookies”也设置好,但如果设置了,请确保在重新联网之前将其设置回来。


3
如何设置--enable-file-cookies,它在chrome://flags的哪个位置? - Mostafa
@Mostafa,我认为他的意思是运行 chrome --enable-file-cookies。但是在Windows 7 SP2上,对于Chrome v81.0.4044.138 64位版本,这对我不起作用。 - Sopalajo de Arrierez

1

对于那些仍在寻找方法的人,可以尝试设置URL参数而不是cookie

我曾经下载了一些HTML小说以供离线阅读,但是没有办法使用cookie将先前设置的字体大小传递到下一章节,所以我做的是:

  1. 首先添加一个窗口事件监听器,每当链接(到下一章)被点击时添加字体大小参数
  2. 然后是window.onload函数,它获取参数值并更改字体大小

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <a href="ch-02.html" >Next Chapter</a>
    <p id="content">Hope this helps</p>
    
<script>
var fontSize = 1;
window.addEventListener("click", function(e) {
    var href = e.target.getAttribute("href");
    if(href) {
        location.href = href + "?fontSize=" + fontSize;
        e.preventDefault();
     }
})
window.onload = function(){
  var url = new URL(window.location.href);
  var value = url.searchParams.get("fontSize");
  if(value != null){
    fontSize = parseFloat(value);
    document.getElementById("content").style.fontSize = fontSize + "em";
  }
}
</script>
    
  </body>
</html>


0
作为解决方法,您可以使用Tampermonkey来访问本地文件(如何在Tampermonkey脚本中包含本地htm页面?)。这样,您将使用Tampermonkey的存储,并且可以通过函数GM_getValue(data)和GM_setValue(data)设置和获取数据。我曾经在我的本地HTML页面上使用它,我将其用作可自定义的Windows资源管理器替代品。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接