编辑自调试更新以来
根据.net cookie documentation:
使用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。
注意:我已经在github中搜索了整个组织的代码库,并且代码中没有引用旧令牌。
事实上,这种行为发生在代码的不同点,具体取决于我调用的控制器方法,这使我认为这是在单独的线程上发生的。
由于没有引用Cookie名称,这使我认为IIS正在修改cookie,但这更加令人困惑,因为我认为IIS无法访问HttpContext.Current,因为我可以在查看Cookie的同时仍在调试,而不是在之后。
当代码中没有引用cookie名称并且在调试器中的No-Op语句期间发生时,如何将cookie添加到响应中?
编辑 我从应用程序中删除了所有过滤器和模块(除了添加默认的json格式化程序),然后导航到一个不存在的页面,并且仍然将旧令牌添加到了请求中
这怎么发生?