2012-07-30 22 views
5

ユーザーにサインインするときにこのコードを使用していますが、その文字列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 

そして、それがうまく動作しますが、I場合をそれは、このIf文の中に入ることは決してありませんクラスの代わりに共用法のPage_Loadの中に同一のラインを入れ

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

ですが、なぜでしょう、そしてコード - で動作するようにこれを再書き込みするためにいくつかの方法がありますPage_Lの後ろoadをクラスに入れる代わりに、クラスはヘッダーで特定のページへのアクセスを許可するために使用されます。しかし、ユーザーがログインしているかどうかに基づいてラベルやボタンを変更するには、デフォルトページのユーザー認証の別の方法が必要です。これはクラスでは実行できません。

+0

「FormsAuthentication.SetAuthCookie()」を使用する代わりに、そのクッキーを手動で作成する特別な理由はありますか?あなたのコードは機能するかもしれませんが、.NETはそれを行います。 (ただの観察)。 –

+0

はい、あります - これは、すでに10kプラスのユーザーがいて、私の仕事はすべてのものを変更するものではありません。既存のデータベースでコードを動作させるだけです –

+0

同じリクエストでCookieを作成しますか?これは動作しません。コンテキストはCookieを設定したリクエストの次のリクエストから開始します。 –

答えて

2

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

は、静的メソッド呼び出しとPage_Loadのコンテキストが既にウィジェットの方向にあなたを指していたと思うならば、シーケンスの問題/競合条件になることがあります。

+0

私はそれを正しく理解しました - 私のsUserDataは常に正しいですが、セッション(" UserID ")が設定されていないことを認識しませんでした認証チケット全体が設定されず、実際には設定されますが、値は空です –

関連する問題