每次更新后,我现在都有cookie情况的屏幕截图。这是他们依恋的地方。注意日期时间;该电话是在格林尼治标准时间18:09左右发出的,因此18:07:57的到期日期时间是正确的。这些cookie的预期行为是自动过期并消失。
相反,cookie会附加到许多后续调用中。这是一个例子。顶部的Cookie不相关。
最后,当我在F12工具中检查cookie时,看到的过期日期时间与服务器设置的过期时间无关-大约在00:11:40之后?这些cookie尚未在服务器上刷新。一方面,没有任何要求这样做的请求,也没有任何在响应中包含新cookie的调用。另外,当刷新时,这些cookie将作为安全返回,而并非如此。因此,我只能得出结论,Chrome浏览器正在错误处理服务器设置的到期日期时间。
在我的应用程序中,我有一个API调用,它是用户注销工作流程的一部分。此调用返回一个响应,其中包含三个Cookie的空白版本,这些Cookie存储了已登录用户的各种信息,并且其Expires日期时间设置为前一分钟。这里的目的是用过期的cookie替换cookie,从而删除cookie。
这种方法已经运行了好几年,但是最近我收到了Chrome用户的抱怨,称他们有身份验证问题。简而言之,发生的事情是当用户注销时,实际上已经在Chrome中附加了预过期的注销cookie,从而使系统认为用户仍在登录。
有可能在用户尚未登录时调用此代码块,特别是在用户重定向到登录页面之前。这样做的目的仅仅是确保在我们重新登录之前清除所有三个cookie。该特定流程似乎是问题所在。过去,此调用是无害的-浏览器取回了一些过期的Cookie,但没有任何反应。不过,现在,过期的cookie正在附加,这意味着用户开始时没有cookie,最后以所有三个cookie(具有空值)结束。
通过手动删除cookie或使用其他浏览器可以缓解此问题。我已经很久没有更改此功能了。我也无法在本地复制它,我的质量检查团队也不能。因此,我怀疑这与最近的Chrome更新有关,也许我们的某些最终用户已经获得了更新,但我却没有(或者反之亦然:我有一个更新的版本修复了一些相关的错误)。
这是最终用户的屏幕截图,显示了这三个Cookie都已附加到她的Chrome浏览器中。顶线已覆盖,因为它无关紧要;域名被包含是因为它们敏感,但它们是正确的。前两个cookie是HttpOnly,没有一个是安全的。
根据最终用户向我发送此屏幕截图的时间,我猜想Expire时间可能是在附加Cookie之后的十分钟内-我不清楚,但是我在Expire时间之前收到了她的电子邮件起来了因此,将Expire时间设置为将来的某个时间,而不是我的代码中预期的过去1分钟。
一个猜测是,仅减去1分钟便不足以可靠地触发cookie的预过期。我打算将其更改为.AddDays(-1)。另一个猜测是,由于某种原因,接收到的过期cookie不会代替好的cookie(因为在进行此调用时实际上并未登录用户,请参见上文),这使浏览器无法使用过期的cookie。我的第三个猜测是,它在某种程度上与安全cookie有关;我们的生产环境是HTTPS,而dev和QA不是。请注意,这些cookie并不安全,因为它们只是要过期,但是通常替换的真实cookie是安全的。
但是,我对这些想法完全没有信心,并且由于我无法在本地进行测试,因此无法确定。我很乐意在将某些内容提交生产之前,对可能的修复程序有更多的了解。
非常感谢您的帮助!
语言:C#
框架:ASP.NET 4.5.2
注意:我正在使用System.Web.Http中.NET的ApiController类进行此操作,因此没有会话或状态(我未使用System.Web.Mvc中的Controller类)。