【发布时间】:2011-01-14 12:54:34
【问题描述】:
我有一个持久的 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 也会被转储(而且非常小)。
编辑注意:发生这种情况时会话令牌不会丢失。但是,由于身份验证 cookie 丢失,它会被忽略并在后续登录时替换。
【问题讨论】:
标签: asp.net cookies redirect iis-6 forms-authentication