2013-03-12 36 views
2

目前,我的Cookie設置爲0,當用戶關閉瀏覽器時,cookie將過期。有沒有辦法將Cookie設置爲在用戶離開我的網站時過期?將Cookie設置爲當用戶瀏覽網頁時過期

Cookie.write('cookieName', 'true',{duration:0}); 

我定義「離開我的網站」爲:導航到另一個域乾脆,我想cookie來住,如果他們導航輪我的網站

+1

定義「離開您的網站」。他們可能只是導航到您網站上的另一個頁面或完全不同的網站。 – 2013-03-12 15:48:33

+0

請參閱編輯........ – RSM 2013-03-12 15:49:57

+1

爲什麼不使用會話cookie?這是更方便,不需要任何技巧工作。此外,如果用戶在很短的時間內離開並返回,他的數據仍然有效。 – 2013-03-12 15:54:58

回答

4

正如你無法預測何時用戶將導航離開從頁面中,您可能需要在onbeforeunload事件中過期cookie。

window.onbeforeunload = deleteMyCookie; 

我還沒有加入deleteMyCookie功能的實現 - 但本質上可以覆蓋一個空字符串的cookie,並設置到期日期爲當前時間。

更新 - 您的問題編輯無效此答案。在你的情況下,你不知道他們什麼時候離開你的域名 - 所以你必須解決設置基於時間的失效。您可以設置一個相當短的時間(比如說5分鐘),並在每次在您的網站上加載一個頁面時將其移動 - 這樣,Cookie離開您的域後最多隻能生活5分鐘。

+0

如果在您離開時儘快過期,那麼使用cookie是沒有意義的。 Javascript變量更適合這些情況,特別是因爲'onbeforeunload'事件並不總是觸發。 – 2013-03-12 15:50:49

+0

這取決於。如果您製作了許多AJAX請求,則Cookie將隨這些請求一起發送。我並不是說這裏就是用例,但這是這種cookie的一種用法。 – Fenton 2013-03-12 15:51:46

+0

只有當它們導航到另一個域時,不僅僅是導航到另一個頁面,我希望cookie只要在我的網站上就可以保留。但是,如果他們去了另一個網站,回來它不再存在。 – RSM 2013-03-12 15:53:05

1

這是不可能的。 Cookie標準並未設計用於支持該情況。 Cookies是關於HTTP請求和響應(無狀態協議中的狀態),而不是關於用戶使用瀏覽器來自一個頁面到另一個不同域的請求,然後到期東西。

到期基於時間(或瀏覽器會話),而不是在瀏覽器標籤的會議,而不是在用戶導航模式等。

如果你有一個支持每一個互聯網進程瀏覽器域(可能作爲安全功能),然後設置爲僅允許每個進程使用Cookie,但此可能不會執行任何其他操作。然而,正如這個例子所顯示的,這是基於瀏覽器的Cookie實現的,並且沒有特別的操作,即如何在JavaScript中設置cookie。