【问题标题】:MS Edge dropping cookieMS Edge 丢弃 cookie
【发布时间】:2019-04-30 23:17:51
【问题描述】:

我们在至少版本 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
)

【问题讨论】:

标签: cookies session-cookies microsoft-edge


【解决方案1】:

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

  1. 当您说在其他浏览器中没问题时,是基于某些测试用例还是 Edge 只是通常使用的众多浏览器中的一种?
  2. 您是否在错误请求之前/之后检查过 cookie 是否仍然在客户端注册?您是否检查过客户端的请求标头?问题是关于 Edge 忘记了 cookie 本身,Edge 忘记发送 cookie,Edge 发送了一个错误的 cookie。您是否也尝试过调整 cookie 名称和内容(例如remove domain,如果在您的子域上下文中可行)?
  3. 服务器端呢? Load balancers 可以作为解释。会话存储也可能是一个线索(尽管“没有返回会话 cookie”请求是先前未记录的无效 cookie 踢的结果,但机会非常低)。当然,如果其他浏览器在相当多的情况下运行良好,那么服务器端调查毫无意义。

  4. 您如何运行客户端应用程序并执行请求? Ajax 或获取请求以及完整的文档加载(您的 URI 看起来非常 APIsh)?你注意到请求模式和问题之间的联系了吗? 应用程序客户端部分中的 cookie 数据不可用也可以作为指导原则(例如,在很少满足条件的情况下唤醒请求的service worker that can't access cookies)。 Edge can also be faulty with cookie sent back with Ajax 在本地文件中(一种糟糕的应用方式,但我见过很多奇怪的东西)。

根据您提供的信息,这些点似乎很少能产生如此不一致的行为,除非混合在一些血腥的边缘敏感药水中。无论如何,答案可能有助于集中问题并定义更可复制的上下文。

除此之外,我发现一个2-years old thread 谈论一个非常、非常、非常、类似的问题,仍然活跃且看起来未解决,对于... IE11(抱歉)。它与从不同浏览器的进程(如选项卡或 iframe)访问时会话 cookie 丢弃有关。我对 Edge 的这个问题一无所知,而且我相信大部分引擎都已被重写,但也许你设法找到了闹鬼的部分(尽管你说在 IE11 上一切都很好)?

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

【讨论】:

  • 好问题! 1. 它基于丢失的用户投诉和与 Edge 之外的其他用户代理的深度日志文件分析。 2. 我设法在 Edge 开发工具中看到一个请求不在 HTTP 请求中,并在服务器端日志记录中确认了这一点。 3.没有负载均衡器。会话存储很好(事实上,我通过在我的测试浏览器上设置丢弃的会话 cookie 并且会话工作得很好) 4. 它是完整的文档加载和 AJAX 请求。没有服务人员,cookie 被标记为 HttpOnly。没有语言环境存储。
  • 看起来 cookie 仅在某些 iframe(再次:到同一来源)交互或在新选项卡中打开外部 URL 后才会发生。我知道关于 IE11 的 2 年旧线程。 IE 11 的使用率相当高,我会再次检查日志以确保。
  • 所以,正如您所说,这显然是客户端。使用的域是由自己的 DNS 服务器管理的本地域还是注册域?我这么说是因为在 cookie 中设置了 domain=localhost 的 Edge 存在错误。您能否在其中一台 Edge 计算机上安装 Whireshark 或 Fiddler 以记录所有传入和传出流量并尝试重现问题?
  • 我能看到的最好的方法是尝试对域进行一些调整(打开一个新标签可能会使事情变得有点混乱:stackoverflow.com/questions/15075349/…
  • 我能想到的最后一个尝试是创建一个具有不同名称的常规 cookie,用于复制会话 cookie 内容,并查看在出现问题时它是否也被丢弃。它可以在不弄乱用户的情况下完成,但你必须改变双方的事情。最好的结果是了解 Edge 是否对会话 cookie 的性质或其内容过敏。
猜你喜欢
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 2012-10-18
相关资源
最近更新 更多