Document.cookie 的设置器在 Web 浏览器中是异步的吗?

foc*_*ner 6 javascript dom

我的印象是document.cookie = "mySessionCookie=mySessionToken"不会立即在浏览器中设置。

更准确地说,这是我的情况:

  • 我已登录。
  • 我想使用 Javascript 注销。
  • 所以我设置,例如document.cookie = "mySessionCookie=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT"
  • 然后我打电话window.location.reload()确认我已注销。

它大多有效,但是,通常情况下,浏览器似乎没有足够的时间在调用之前设置我的新 cookie 值window.location.reload()

除非我在我的代码中做错了什么,否则这种行为表明它document.cookie = "value"不是在同一个堆栈上执行的(因此,它本身可能不是异步的,但是当与其余代码一起使用时,它具有不可预测的行为)。

所以,我的问题是,可以document.cookie = "value"在不同的堆栈上执行吗?

foc*_*ner 8

事实上,正如@charlietfl 对我最初问题的评论所指出的那样,document.cookiesetter 将立即设置 cookie。

我真正的问题是我的程序中有一个错误,我没有注意这样一个事实,即当设置 cookie 时没有提供路径和 cookie 值时,浏览器将根据当前 URI 设置 cookie 的“路径”使用 JavaScript。

例如,如果要在example.com查看 at 的资源时清除 at 的所有 URI 的会话http://example.com/fake-resource,则必须明确写入:

document.cookie = "sessionToken=;Path=/;Expires=Thu, 01 Jan 1970 00:00:00 GMT"

否则(即如果 Path=/ 被省略)浏览器将创建第二个 cookie example.com/fake-resource,这样主 cookie 将继续存在。