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

これは問題なく機能しますが、クラスのSharedメソッドの代わりにPage_loadに同じ行を配置すると、このIfステートメントには含まれません。

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

なぜこれが起こっているのですか、そしてこれをクラスに入れる代わりにコードビハインドPage_Loadで機能するように書き直す方法があります、クラスは特定のページへのアクセスを許可するためにヘッダーで使用されます-それで機能します大丈夫。しかし、ユーザーがログインしているかどうかに基づいてラベルとボタンを変更するには、デフォルトページでユーザーを認証する別の方法が必要です。これはクラスでは実行できません。

4

1 に答える 1

2

Page_Loadイベントフックの実装ではなく、実際のページイベントオーバーライド(つまり、OnLoad)にページイベントオーバーライドを配置しようとしましたか?よりパフォーマンスが高く(呼び出しの層が少ない)、ライフサイクルにわずかな違いがあり、ニーズに適合し、これらの症状の原因を抽出する可能性があります。

静的メソッド呼び出しとPage_Loadのコンテキストが、Wiktor Zychlaがすでにフィドルの方向を示している場合は、シーケンスの問題/競合状態が発生している可能性があります。

于 2012-08-01T11:38:24.847 に答える