【问题标题】:Internet Explorer on Windows Phone 8.1 losing session and permanent cookiesWindows Phone 8.1 上的 Internet Explorer 丢失会话和永久 cookie
【发布时间】:2016-03-15 13:01:13
【问题描述】:

我们有一个 SaaS 应用程序,其中浏览器使用名为 session-id 的 cookie 连接到服务器端会话。此 cookie 的值是第一次看到任何给定浏览器时创建的 UUID v4 标识符。我们将 cookie 发送为

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

除了在 Windows Phone 8.1 上运行的 Internet Explorer 似乎存在 cookie 突然丢失的问题之外,其他一切似乎都很好。

导致cookie丢失的案例:

  1. 在手机上切换或启动占用大量 RAM 的任何其他应用程序。
  2. 关闭浏览器(按住返回按钮 2 秒,点击浏览器屏幕截图上的 (X))。
  3. 重启手机

案例 1 尤其成问题,因为它对用户来说像是随机故障。在这种情况下,Internet Explorer 将重新加载页面,并且页面重新加载的 GET 请求缺少 cookie。我知道案例 2 和案例 3 是预期的行为,因为我在上面使用了会话 cookie。

我也尝试使用

设置永久(28 天)cookie
Set-Cookie:session-id=ebbaf531-8763-4a59-b086-d946124f8d64; Path=/; HttpOnly; Secure; max-age=2419200; Domain=peda.net

同样的行为仍然存在。请注意,此“永久”cookie 不会在浏览器重新启动或手机重新启动时结束。

是否有已知的解决方法可以避免随机丢失 cookie? 我正在尝试让用户选择加入永久会话,并且所有其他浏览器都可以正常工作。 Windows Phone 8.1 上的 Internet Explorer 是最后一个障碍。我已经尝试添加和删除属性domain,但没有任何效果。

【问题讨论】:

    标签: internet-explorer cookies windows-phone-8 setcookie


    【解决方案1】:

    根据我所做的测试,会话 cookie 什么也做不了。 Windows Phone 上的 Internet Explorer 将始终丢弃所有列出的情况的所有会话 cookie。这对于 (1) 丢弃 cookie 的原因是 Internet Explorer 在后台运行时 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 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多