c# - 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 格式化程序),我导航到一个不存在的页面,并且仍然将旧令牌添加到请求中
这怎么会发生?
解决方案
推荐阅读
- javascript - 水平和垂直获得完全相同的图像尺寸(特殊情况)
- python - 如何通过python打开文件资源管理器
- json - 诺克斯令牌是安全的吗?
- spring-security - 如果在spring webffux中过期或未过期,如何通过检查前一个的生命周期来获取新的访问令牌?
- python - 我已经安装了 OpenCV C++。我可以在不重新安装库的情况下在 Python 中使用它的功能吗?
- bash - -Bash Shell 脚本“没有这样的文件或目录”
- c++ - 这个失败的 C++ 字符串比较我错过了什么?
- intake - 数据持久化到原始数据源
- python - 如何在 sympy 的情节中使轴成为正确的长度
- c# - 如何从 Microsoft Store 获得应用许可证?