5

我在登录 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 中工作,而不必将其放在一个类中,该类用于标题中以允许访问某些页面 - 这样就可以了美好的。但是我需要另一种在默认页面上对用户进行身份验证的方式来根据用户是否登录的天气更改标签和按钮,而这不能在课堂上完成。

4

1 回答 1

2

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

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

于 2012-08-01T11:38:24.847 回答