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

时间:2010-02-08 20:16:39

标签: 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个不同的顶级域名,其中包含大约10个其他子域)

我正在调查的一个途径是cookie可能太大了。我认为会检查进入响应的cookie的大小,我不认为它会以这种方式影响它。请求可能会转储cookie的任何想法?

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

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

2 个答案:

答案 0 :(得分:5)

事实证明,转储到此特定用户的cookie中的cookie数据恰好超过了其加密格式的最大允许大小。未加密,数据适合,但一旦在其上运行加密,大小就会变得太大而无法处理。这导致cookie及其后添加的任何cookie从响应头中删除。

切入注入cookie的数据量解决了这个问题。

答案 1 :(得分:0)

潜在问题是您重定向的方式;通过将布尔值设置为true,您发送ThreadAbortException,您可能会丢失会话令牌。将布尔值设置为false或使用FormsAuthentication.RedirectFromLoginPage