我有一个表单身份验证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)
用户将得到一点处理,以检查第一次登录、安全问题等,然后使用以下tiddit进行重定向:
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)
此时,对于这一个用户来说,authcookie什么都不是。我还有15000个其他用户没有受到这种影响。然而,对于一个用户来说,cookie只是消失了,没有任何痕迹。我以前见过w3wp.exe异常、状态服务器异常和其他与IIS进程相关的异常,但在事件日志中没有得到异常。W3wp.exe没有崩溃,状态服务器有一些超时,但它们似乎不相关(由时间戳验证),并且它只发生在这一个域上的这一个用户身上(此代码在两个不同的TLD上使用,大约有10个子域)。
我正在调查的一个方法是饼干可能太大了。我认为在响应中会有一个关于cookie大小的检查,我不认为它会以这种方式影响它。你知道为什么请求会丢弃cookie吗?
注意:我提到的第二个cookie也会被丢弃(非常小)。
edit-note:发生这种情况时,会话令牌不会丢失。但是,由于身份验证cookie丢失,因此在后续登录时将忽略并替换它。