表单身份验证无法正确验证用户

Sco*_*lby 5 vb.net asp.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").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)))
Run Code Online (Sandbox Code Playgroud)

然后我有代码,我检查用户是否在公共类中的共享(静态)方法中登录,如下所示:

 If HttpContext.Current.User.Identity.IsAuthenticated Then
 EndIf
Run Code Online (Sandbox Code Playgroud)

这样做很好,但如果我在Page_load而不是类的共享方法中放入相同的行,它将永远不会进入此If语句

  If HttpContext.Current.User.Identity.IsAuthenticated Then
  EndIf
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,并且有一些方法可以重新编写它以在代码隐藏的Page_Load中工作,而不必将其放在一个类中.该类用于标题以允许访问某些页面 - 这样就可以了精细.但我需要在默认页面上另一种用户身份验证方式,根据用户登录或未登录的天气更改标签和按钮,这不能在课堂上完成.

小智 2

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

如果静态方法调用和 Page_Load 的上下文可能存在排序问题/竞争条件,我认为 Wiktor Zychla 已经为您指出了 fiddler 的方向。