Asp.net 表单身份验证未正确验证用户

Asp.net 表单身份验证未正确验证用户,asp.net,vb.net,forms-authentication,Asp.net,Vb.net,Forms Authentication,我有这个代码,当用户登录时,那个字符串sUserData被正确设置 Dim sUserData As String = HttpContext.Current.Request.Cookies("UserID").Value & "|" & HttpContext.Current.Request.Cookies("UserName").Value & "|" & HttpContext.Current.Request.Cookies("UserEmail").V

我有这个代码,当用户登录时,那个字符串sUserData被正确设置

  Dim sUserData As String = HttpContext.Current.Request.Cookies("UserID").Value & "|" & HttpContext.Current.Request.Cookies("UserName").Value & "|" & HttpContext.Current.Request.Cookies("UserEmail").Value

  Dim fat As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, _
     HttpContext.Current.Session("UserID"), DateTime.Now, _
     DateTime.Now.AddDays(6), True, sUserData, _
     FormsAuthentication.FormsCookiePath)
  HttpContext.Current.Response.Cookies.Add(New HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(fat)))
然后,我有一段代码,检查用户是否在公共类中的共享(静态)方法中登录,如下所示:

 If HttpContext.Current.User.Identity.IsAuthenticated Then
 EndIf
这很好,但是如果我在Page_load中放置相同的行,而不是类的共享方法,它将永远不会进入这个if语句

  If HttpContext.Current.User.Identity.IsAuthenticated Then
  EndIf

为什么会发生这种情况,是否有某种方法可以重新编写它以在代码隐藏页面加载中工作,而不必将其放入类中,该类被用于标题中,以允许访问某些页面-因此工作正常。但是我需要默认页面上用户的另一种身份验证方式,根据用户是否登录来更改标签和按钮,而这不能在类中完成。

您是否尝试将页面事件覆盖放入实际的页面事件覆盖(即OnLoad)而不是页面加载事件挂钩实现中?性能更高(调用层次更少),生命周期略有不同,这可能适合您的需要,并可能提取这些症状的原因


如果静态方法调用的上下文和页面加载,我认为Wiktor Zychla已经为您指明了fiddler的方向,那么可能会出现排序问题/争用条件。

是否有任何特殊原因导致您手动创建cookie而不是使用
FormsAuthentication.SetAuthCookie()
您的代码可能会工作,但是.NET会帮你的。(只是一个观察)。是的,必须是这样的,已经有超过10万的用户,我的工作不是全部更改,只是让我的代码与现有的数据库一起工作。你不是在创建cookie的同一个请求中检查标志吗?这不起作用,因为上下文将从您设置cookie的请求旁边的请求开始设置。@WiktorZychla-nah,如果是这种情况,那么简单地点击“刷新”应该可以让它工作,因为现在它被保证在设置之后进行检查,但它仍然不起作用。只需点击“刷新”按钮,即可向浏览器发送相同的请求。如果cookie未与上一个请求一起出现,则它不会发送cookie。无论如何,请使用http调试器查看cookie是否存在。Fiddler就可以了。我想出来了,这是正确的方向-我的数据总是正确的,但我没有意识到会话(“UserID”)没有设置,那么整个身份验证票证没有设置,实际上它确实设置了,但值是空的