2016-06-11 272 views
1

我感覺document.cookie = "mySessionCookie=mySessionToken"沒有在瀏覽器中設置。Document.cookie的setter是否在Web瀏覽器中異步?

更確切地說,這裏是我的情況:

  • 我登錄
  • 我想用JavaScript來註銷。
  • 所以我設置了,例如document.cookie = "mySessionCookie=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT"
  • 然後我打電話window.location.reload()確認我已註銷。

它主要工作,但很多時候,在調用window.location.reload()之前,瀏覽器似乎沒有足夠的時間來設置新的cookie值。

除非我在代碼中做錯了什麼,否則這種行爲暗示document.cookie = "value"不會在同一個堆棧上執行(因此,它可能本身不是異步的,但在與其餘部分一起使用時不會發生異步行爲碼)。

所以,我的問題是,document.cookie = "value"可以在不同的堆棧上執行?

+1

不... javascript是單線程的並且設置cookie是同步的。更可能你的問題是別的東西 – charlietfl

+0

@charlietfl,謝謝你確認這一點。那麼我的代碼肯定有問題。 – focorner

回答

1

事實上,正如@charlietfl指出的那樣,我的原問題的評論,document.cookie setter將立即設置cookie。

我真正的問題是我的程序中有一個錯誤,在那裏我沒有注意到瀏覽器會根據當前的URI設置cookie的「路徑」,當沒有路徑與cookie值一起提供當使用JavaScript設置cookie時。

例如,如果一個人想在example.com清除所有的URI的會話,而在http://example.com/fake-resource觀看資源,必須明確地寫:

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

否則(即,如果路徑被省略= /)瀏覽器將爲example.com/fake-resource創建第二個cookie,這樣主cookie將繼續存在。