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

时间:2012-07-30 20:00:59

标签: asp.net vb.net forms-authentication

我在登录User时有这段代码,正确设置了字符串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

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

1 个答案:

答案 0 :(得分:2)

您是否尝试将页面事件覆盖放入实际的页面事件覆盖(即OnLoad)而不是Page_Load事件挂钩实现?更高效(更少的调用层次),生命周期的微小差异可能适合您的需求,并可能提炼出这些症状的原因。

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