2016-03-15 64 views
0

我們有一個SaaS應用程序,其中瀏覽器使用名爲session-id的cookie連接到服務器端會話。這個cookie的值是在第一次看到給定的瀏覽器時創建的UUID v4標識符。我們發送cookie的作爲Windows Phone 8.1上的Internet Explorer丟失會話和永久性Cookie

Set-Cookie: session-id=ebbaf531-8763-4a59-b086-d946124f8d64; Path=/; HttpOnly; Secure; 

其他的一切似乎除了在Windows Phone 8.1上運行的Internet Explorer罰款似乎都在cookie被突然失去的問題。丟失

案件造成的cookie:

  1. 切換或啓動的是需要大量的RAM的手機上的任何其他應用程序。
  2. 關閉瀏覽器(按住Back按鈕2秒鐘,在瀏覽器屏幕截圖上點擊(X))。
  3. 重啓手機

的情況下,1特別成問題,因爲它看起來像隨機故障給用戶。在這種情況下,Internet Explorer將重新加載頁面,並且頁面重新加載的GET請求缺少cookie。我瞭解情況2和情況3是預期的行爲,因爲我在上面使用了會話cookie。

我也曾嘗試使用

Set-Cookie:session-id=ebbaf531-8763-4a59-b086-d946124f8d64; Path=/; HttpOnly; Secure; max-age=2419200; Domain=peda.net 

設置永久(28天)的Cookie和相同的行爲仍然存在。請注意,此「永久」Cookie不會重新啓動瀏覽器或重新啓動手機。

是否有一個已知的解決方法,允許不會隨機丟失cookie?我試圖讓用戶選擇加入永久會話,所有其他瀏覽器都能正常工作。 Windows Phone 8.1上的Internet Explorer是最後一個障礙。我已經嘗試添加和刪除屬性domain但這沒有任何作用。

回答

0

根據我所做的測試,會話cookie不能做任何事情。 Windows Phone上的Internet Explorer將始終放棄列出的所有情況下的所有會話Cookie。這對於情況(1)而言特別有問題,其中當Internet Explorer在後臺運行時,Cookie丟棄的原因是RAM較低。

但是,永久性cookie問題可以解決。事實證明,在Windows Phone 8.1上運行的Internet Explorer(可能也包括所有其他版本)僅支持非標準expires參數,而不支持max-age參數。 Internet Explorer 6.0 - 8.0的桌面版本也會發生同樣的情況,所以我猜測Windows Phone版本是在MSIE 8.0附近分發的,並且包含與Cookie大致相同的問題。參數domain不是必需的。

因此正確Set-Cookie頭看起來如下:

Set-Cookie: session-id=ebbaf531-8763-4a59-b086-d946124f8d64; Path=/; HttpOnly; Secure; max-age=2419200; expires=Thu, 14 Apr 2016 13:12:28 GMT 

expires參數的格式。這種確切的格式具有最大的兼容性。當然,您需要動態計算此屬性的正確值以匹配max-age屬性。