首页 > 解决方案 > Cookie 是从不存在的值复制而来的

问题描述

编辑自调试更新

根据 .net cookie 文档

使用 HttpResponse.Cookies 集合添加 cookie 后,即使尚未将响应发送到客户端,该 cookie 也会立即在 HttpRequest.Cookies 集合中可用。

我最初的观察是我的 cookie 似乎不同步。收到 IUserIdentity 后,我会设置一个身份验证 cookie,如下所示:

HttpContext.Current.Response
    .RemoveCookie(FormsAuthentication.FormsCookieName);  

HttpContext.Current.Request
    .RemoveCookie(FormsAuthentication.FormsCookieName);

var authCookie = FormsAuthenticationExtensions.GetPersistentAuthCookie(
                FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket), ticket.Expiration)
HttpContext.Current.Response.Cookies.Set(authCookie);

首先,我注意到对于 cookie 的值我们不一样,在观察窗口中检查相同的 cookie 后,我注意到相同 cookie 的值甚至不一样:

在此处输入图像描述

我浏览了代码,并注意到在不执行代码的语句期间设置了重复的 cookie 值。(例如,当进入一个不相关的函数时,cookie 现在重复的 cookie 出现在请求和响应 cookie 中)

我继续更新代码中对 cookie 名称的所有引用,以帮助验证可能导致此问题的原因 (VM-AT-89001) => (VM-PAT-89001):

<authentication mode="Forms">
  <forms cookieless="UseUri" name="VM-PAT-89001" requireSSL="true" slidingExpiration="true" timeout="1" />
</authentication>

我清除了所有现有的 cookie,删除了临时 ASP.NET 文件

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\临时 ASP.NET 文件 C:\Windows\Microsoft.NET\Framework\v4.0.30319\临时 ASP.NET 文件

进行了 IISReset 并重置了我的计算机。再次遍历代码时,仍然将OLD cookie 名称添加到请求和响应中。

在此处输入图像描述

cookie 的配置不同,但到期日期相同。例如只有 1 是 HTTP Only。

注意我在 github 中搜索了整个组织代码库,代码中没有对旧令牌的引用。

他们认为这种行为发生在代码中的不同点取决于我调用的控制器方法,这让我认为这是在单独的线程上发生的。

由于没有引用 Cookie 名称,这让我认为 IIS 正在修改 cookie,但这更令人困惑,因为我认为 IIS 无法访问 HttpContext.Current,因为我可以在调试时看到 cookie,并且不是之后。

当代码中没有对 cookie 名称的引用并且它发生在调试器中的 No-Op 语句期间,如何将 cookie 添加到响应中?

编辑 我已经从应用程序中删除了所有过滤器和模块(除了添加默认的 json 格式化程序),我导航到一个不存在的页面,并且仍然将旧令牌添加到请求中

这怎么会发生?

标签: c#.netwcfcookies

解决方案


推荐阅读