MS Edge掉落cookie

Pau*_*eam 5 cookies session-cookies microsoft-edge

至少在16/17版本上,我们在MS Edge上遇到了奇怪的行为。在IE 11 / Chrome / Firefox上不会发生相同的问题。

我们的用户通过会话cookie进行身份验证。Cookie的名称是“ app”。其他cookie涉及使用cookie名称“ prefLang”存储当前的显示语言。Cookie是HttpOnly,是安全的,并且仅针对实际使用的子域进行设置。

在某些情况下,MS Edge只会删除名为“ app”的会话cookie,而不再是HTTP请求的一部分。提及的“ prefLang” cookie不会被删除,并且在服务器上可见。

掉落发生不容易重现,但有时在以下情况下可见:

  • 用户使用target = _blank从登录的应用程序上下文中打开一个外部链接页面
  • 在应用上下文中的两次页面请求之间已经传递了超过12分钟的时间
  • 只需几秒钟的页面请求
  • 用户使用同一来源的页面请求打开iframe

请求/响应调试信息服务器端的示例,其中会话cookie app = redactedABC没有传输到服务器

2018-11-28 09:44:00 UTC POST hasIdentity: 1 UserId: <redacted>  Request: https://app.domain.com/page/action/full/add/0 / Cookie: _gid=redacted; _ga=redacted; app=redacted-ABC; prefLang=de

2018-11-28 09:44:00 UTC 200 hasIdentity: 0 UserId: 0  Response headers: Array
(
    [0] => Expires: Thu, 19 Nov 1981 08:52:00 GMT
    [1] => Cache-Control: no-store, no-cache, must-revalidate
    [2] => Pragma: no-cache
)

2018-11-28 09:46:21 UTC POST hasIdentity: 0 UserId: 0  Request: https://app.domain.com/page/action/full/add/0 / Cookie: _gid=redacted; _ga=redacted; prefLang=de

2018-11-28 09:46:21 UTC 302 hasIdentity: 0 UserId: 0  Response headers: Array
(
    [0] => Expires: Thu, 19 Nov 1981 08:52:00 GMT
    [1] => Cache-Control: no-store, no-cache, must-revalidate
    [2] => Pragma: no-cache
    [3] => Set-Cookie: app=redactedXYZ; path=/; domain=app.domain.com; secure; HttpOnly
)

2018-11-28 09:46:21 UTC GET hasIdentity: 0 UserId: 0  Request: https://app.domain.com/account/login / Cookie: _gid=redacted; _ga=redacted; prefLang=de; app=redactedXYZ

2018-11-28 09:46:21 UTC 200 hasIdentity: 0 UserId: 0  Response headers: Array
(
    [0] => Expires: Thu, 19 Nov 1981 08:52:00 GMT
    [1] => Cache-Control: no-store, no-cache, must-revalidate
    [2] => Pragma: no-cache
)
Run Code Online (Sandbox Code Playgroud)

Ber*_*and 2

我有太多的问题和想法,评论太长了:

  1. 当你说在其他浏览器中没问题时,是基于一些测试用例还是 Edge 只是通常使用的众多浏览器之一?
  2. 您是否设法检查 cookie 在错误请求之前/之后是否仍在客户端注册?您检查过客户端的请求标头吗?问题是 Edge 忘记了 cookie 本身、Edge 忘记发送 cookie、Edge 发送了错误的 cookie。您是否也尝试过稍微调整 cookie 名称和内容(例如,如果在您的子域上下文中可行,则删除域)?
  3. 服务器端呢?负载均衡器可以作为一个解释。会话存储也可能是一个线索(尽管可能性很低,除非“无返回会话 cookie”请求是先前未记录的无效 cookie 踢出的结果)。当然,如果其他浏览器大量正常运行,服务器端调查就没有意义。

  4. 您如何运行客户端应用程序并执行请求?Ajax 或获取请求以及完整文档加载(您的 URI 看起来非常 APIsh)?您是否注意到请求模式和问题之间的联系?应用程序客户端部分中 cookie 数据不可用也可以作为一个指导原则(例如,服务工作人员无法访问在很少满足条件的请求时唤醒的 cookie )。Edge 也可能会出现问题,因为本地文件中使用 Ajax 发回的 cookie(这是一种糟糕的应用程序方式,但我见过很多奇怪的事情)。

根据您提供的信息,这些点似乎很少能够产生如此不一致的行为,除非混合在一些该死的边缘敏感药水中。无论如何,答案可能有助于集中问题并定义更可重现的背景。

除此之外,我发现了一个2 年前的帖子,讨论了一个非常、非常、非常、相似的问题,仍然活跃并且看起来尚未解决,针对...... IE11(抱歉)。它与从不同浏览器进程(如选项卡或 iframe)访问时会话 cookie 丢失有关。我没有发现有关 Edge 的此问题的任何信息,并且我相信大部分引擎已被重写,但也许您设法找到了闹鬼的部分(尽管您说 IE11 上一切都很好)?

如果您同意,您最好用相关的相关点编辑您自己的问题,以便我可以删除这个不是真正答案的答案。

  • 好问题!1. 它基于缺失的用户投诉以及与除 Edge 之外的其他用户代理的深入日志文件分析。2. 我设法在 Edge 开发工具中看到一个请求不在 HTTP 请求中,并在服务器端日志记录中确认了这一点。3.没有负载均衡器。会话存储很好(事实上,我通过在测试浏览器上设置删除的会话 cookie 来检查这一点,并且会话工作得很好) 4. 它是完整文档加载和 AJAX 请求。没有服务工作者,并且 cookie 被标记为 HttpOnly。没有区域设置存储。 (2认同)