Chrome保留了过期的Cookie

时间:2019-06-24 17:27:34

标签: c# asp.net .net google-chrome cookies

更新:我已经能够在生产环境中重现此内容。尽管将这些cookie的Expires日期时间设置为-1分钟(请参见下面的代码),但它们可靠地出现在浏览器中,且过期时间为十分钟。现在,我已经有一个用户报告了IE11中的行为,但是我仍然只能在Chrome中进行复制。我已经毫无问题地测试了Firefox和Safari。最近的Chrome更新是否改变了它们处理Cookie的方式?

每次更新后,我现在都有cookie情况的屏幕截图。这是他们依恋的地方。注意日期时间;该电话是在格林尼治标准时间18:09左右发出的,因此18:07:57的到期日期时间是正确的。这些cookie的预期行为是自动过期并消失。 responseCookies

相反,cookie会附加到许多后续调用中。这是一个例子。顶部的Cookie不相关。 enter image description here

最后,当我在F12工具中检查cookie时,看到的过期日期时间与服务器设置的过期时间无关-大约在00:11:40之后?这些cookie尚未在服务器上刷新。一方面,没有任何要求这样做的请求,也没有任何在响应中包含新cookie的调用。另外,当刷新时,这些cookie将作为安全返回,而并非如此。因此,我只能得出结论,Chrome浏览器正在错误处理服务器设置的到期日期时间。 enter image description here

原始帖子

在我的应用程序中,我有一个API调用,它是用户注销工作流程的一部分。此调用返回一个响应,其中包含三个Cookie的空白版本,这些Cookie存储了已登录用户的各种信息,并且其Expires日期时间设置为前一分钟。这里的目的是用过期的cookie替换cookie,从而删除cookie。

这种方法已经运行了好几年,但是最近我收到了Chrome用户的抱怨,称他们有身份验证问题。简而言之,发生的事情是当用户注销时,实际上已经在Chrome中附加了预过期的注销cookie,从而使系统认为用户仍在登录。

有可能在用户尚未登录时调用此代码块,特别是在用户重定向到登录页面之前。这样做的目的仅仅是确保在我们重新登录之前清除所有三个cookie。该特定流程似乎是问题所在。过去,此调用是无害的-浏览器取回了一些过期的Cookie,但没有任何反应。不过,现在,过期的cookie正在附加,这意味着用户开始时没有cookie,最后以所有三个cookie(具有空值)结束。

通过手动删除cookie或使用其他浏览器可以缓解此问题。我已经很久没有更改此功能了。我也无法在本地复制它,我的质量检查团队也不能。因此,我怀疑这与最近的Chrome更新有关,也许我们的某些最终用户已经获得了更新,但我却没有(或者反之亦然:我有一个更新的版本修复了一些相关的错误)。

这是我的代码,其中包含一些敏感的命名。 enter image description here

这是最终用户的屏幕截图,显示了这三个Cookie都已附加到她的Chrome浏览器中。顶线已覆盖,因为它无关紧要;域名被包含是因为它们敏感,但它们是正确的。前两个cookie是HttpOnly,没有一个是安全的。

根据最终用户向我发送此屏幕截图的时间,我猜想Expire时间可能是在附加Cookie之后的十分钟内-我不清楚,但是我在Expire时间之前收到了她的电子邮件起来了因此,将Expire时间设置为将来的某个时间,而不是我的代码中预期的过去1分钟。 logoutCookies

一个猜测是,仅减去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类)。

0 个答案:

没有答案