Express 浏览器未为显式域保存cookie

Express 浏览器未为显式域保存cookie,express,cookies,xmlhttprequest,session-cookies,fetch-api,Express,Cookies,Xmlhttprequest,Session Cookies,Fetch Api,在服务器上我使用express.js,在浏览器中我使用fetchapi。我使用默认域发送cookie,浏览器将其正确设置并与后续请求一起发送。但是当我将域设置为父域时,cookie不会被设置。我的理解是 假设我的代码是从“my.example.com”端口8080提供的。然后,我的服务器代码如下所示: response.cookie("token",token,{ encode:String, domain:".example.com", expires: new Dat

在服务器上我使用express.js,在浏览器中我使用fetchapi。我使用默认域发送cookie,浏览器将其正确设置并与后续请求一起发送。但是当我将域设置为父域时,cookie不会被设置。我的理解是

假设我的代码是从“my.example.com”端口8080提供的。然后,我的服务器代码如下所示:

response.cookie("token",token,{
    encode:String,
    domain:".example.com",
    expires: new Date(Date.now()+86400000000),
    secure:false}
)
fetch("/login", {
    credentials: "include", // also tried "same-origin"
    mode:"cors", // also tried omitting
    headers:new Headers( {
         // authentication data is here
    })
})
在客户端上,我的代码如下所示:

response.cookie("token",token,{
    encode:String,
    domain:".example.com",
    expires: new Date(Date.now()+86400000000),
    secure:false}
)
fetch("/login", {
    credentials: "include", // also tried "same-origin"
    mode:"cors", // also tried omitting
    headers:new Headers( {
         // authentication data is here
    })
})
起初我认为这是一个事实,它是父域,但如果我使用任何域,它似乎没有得到保存的cookies

因此,在客户端上不会保存以下内容:

    domain:".example.com",

    domain:".example.com:8080",

    domain:"my.example.com",

    domain:"my.example.com:8080",
但如果我省略了“域”,那么它确实会被保存

更清楚的是,当我在Chrome developer tools中看到回复时,我看到cookie被收到了——它只是因为某种原因没有被保存

我需要能够从任何其他子域为任何子域设置此cookie。从我读到的内容来看,a.example.com应该可以将cookie设置为.example.com,以便b.example.com可以使用它

更新:我还尝试使用XMLHttpRequest,得到了相同的行为

更新2:我也无法直接从带有父域的javascript设置cookie,例如,这可以:

document.cookie=("token=<...>; Domain=my.example.com; Path=/")
document.cookie=(“令牌=;域=my.example.com;路径=/”)
但这并不是:

document.cookie=(“令牌=;域=.example.com;路径=/”)
从我所读到的一切来看,这一行应该行得通,但它对我不起作用。我认为这里应该没有问题,对吗?如果是这样,我如何解决为什么无法设置cookie的问题?我已经尝试过的事情:

  • my.example.com指向127.0.0.1。指向另一个非本地主机地址,但未解决此问题

  • my.example.com实际上不是一个.com地址,也不是其他5个硬编码地址中的一个,只有一个点是允许的。指向一个.com地址,但没有解决问题

  • 也许从控制台设置cookie以进行测试不起作用。尝试了直接从服务器加载的javascript代码中进行的所有更改,但没有修复该问题

  • 也许标题的顺序很重要。已将路径移到域之前

  • 也许这个案子很重要。将“路径”和“域”更改为所有小写。没有解决问题

  • 也许“路径”不需要在那里。删除它并不能解决问题

  • 删除了cookie元素之间的空白。没有效果

  • 也许有一个奇怪的字符混淆了需要编码的东西。选中,则令牌中只有字母数字键。Cookie的总长度只有大约100字节,远远低于最大值,因为只有一个Cookie

  • 也许我的域名有一些奇怪的地方,浏览器不喜欢,上面没有提到。于是我去了www.example.com,打开控制台,输入:

    document.cookie=“令牌=1;域=.example.com;路径=/”

  • 成功了。然而,我对我的.com地址和example.com之间可能存在的差异感到困惑!我的域名不是www.myhostname.com的形式,但我看不到任何说明子域必须是“www”的内容。是否有可能在浏览器中有东西被列入黑名单或以其他方式对待某些域?(它来自一个动态DNS托管站点,尽管我看不出这有什么区别,因为IP地址实际上从未改变,并且有一个很长的TTL。)

  • 我的服务器在端口8080上运行,而不是端口80。我将其切换为仅运行端口80,以查看这是否会产生任何影响。事实并非如此
  • 哎哟。我浪费了很多时间试图解决这个问题,结果发现浏览器是因为我的子域位于一个新的位置