我在登录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中工作,而不必将其放在类中。该类用于标题以允许访问某些页面 - 这样工作正常。但是我需要另一种在默认页面上对用户进行身份验证的方法,根据用户登录或未登录的天气来更改标签和按钮,这不能在课堂上完成。
答案 0 :(得分:2)
您是否尝试将页面事件覆盖放入实际的页面事件覆盖(即OnLoad)而不是Page_Load事件挂钩实现?更高效(更少的调用层次),生命周期的微小差异可能适合您的需求,并可能提炼出这些症状的原因。
如果静态方法调用的上下文和Page_Load,那么可能可能是一个排序问题/竞争条件,我认为Wiktor Zychla已经指向了fiddler的方向。