ASP.Net FormsAuthentication Redirect 丢失 Redirect 和 Application_AuthenticateRequest 之间的 cookie

标签 asp.net cookies redirect iis-6 forms-authentication

我有一个 FormsAuthentication cookie,它是持久的,并且在开发、测试和生产环境中独立工作。我有一个可以进行身份​​验证的用户,创建了用户对象,将身份验证 cookie 添加到响应中:

'Custom object to grab the TLD from the url
authCookie.Domain = myTicketModule.GetTopLevelDomain(Request.ServerVariables("HTTP_HOST"))
FormsAuthentication.SetAuthCookie(authTicket.Name, False)
Response.SetCookie(authCookie)

对用户进行一些处理以检查首次登录、安全问题等,然后使用以下花絮进行重定向:

Session.Add("ForceRedirect", "/FirstTimeLogin.aspx")
Response.Redirect("~/FirstTimeLogin.aspx", True)

通过调试中断,我可以验证 cookie 集合是否包含与我为不同目的设置的身份验证无关的 cookie 和 formsauthentication cookie。然后该过程的下一步发生在 global.asax 中的 ApplicationAuthenticateRequest 处:

Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)
    Dim formsCookieName As String = myConfigurationManager.AppSettings("FormsCookieName")
    Dim authCookie As HttpCookie = Request.Cookies(formsCookieName) 

此时,对于这个 ONE 用户来说 authCookie 不算什么。我还有 15,000 名其他用户没有受到这种方式的影响。然而,对于一个用户来说,cookie 就消失得无影无踪。我之前在 w3wp.exe 异常、状态服务器异常和其他 IIS 进程相关异常中见过这种情况,但我在事件日志中没有收到任何异常。 w3wp.exe 没有崩溃,状态服务器有一些超时,但它们似乎无关(通过时间戳验证),并且仅发生在该域上的一名用户(此代码在 2 个不同的 TLD 和大约 10 个其他子域中使用) .

我正在调查的一个途径是 cookie 可能太大了。我认为会检查响应中 cookie 的大小,并且我认为这不会以这种方式影响它。知道为什么请求可能会转储 cookie 吗?

注意:我提到的我设置的辅助 cookie 也会被转储(而且它非常小)。

编辑注意:发生这种情况时, session token 不会丢失。但是,由于身份验证 cookie 丢失,因此在后续登录时它会被忽略并被替换。

最佳答案

事实证明,转储到该特定用户 cookie 中的 cookie 数据恰好超出了其加密格式允许的最大大小。未加密时,数据可以容纳,但一旦对其进行加密,大小就会变得太大而无法处理。这导致 cookie 以及在其之后添加的任何 cookie 从响应 header 中删除。

减少注入(inject) cookie 的数据量解决了这个问题。

关于ASP.Net FormsAuthentication Redirect 丢失 Redirect 和 Application_AuthenticateRequest 之间的 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2224562/

相关文章:

java - 为什么我的 "Set-Cookie"响应 header 没有被翻译成实际的 cookie?

php - 根据数据库中的角色重定向到不同的页面

php - 如何重定向保留原始引用字段?

java - 在Java中将 "dir"的结果输出到控制台

css - AspNet Set Focus() 有效但 :focus style's not apply

c# - 在 ASP.NET 中包含 log4Net 外部配置文件的最佳实践

ios - 查看 iOS 应用程序的设置 cookies?

asp.net - 为什么我需要在 ASP.NET 控件上调用 dispose?

c# - 当多个实例运行时,使用ASP.NET重置密码时无效的 token

javascript - ReactJS/下一个JS : Don't get access to cookie/properties after redirecting