ユーザーにサインインするときにこのコードを使用していますが、その文字列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をクラスに入れる代わりに、クラスはヘッダーで特定のページへのアクセスを許可するために使用されます。しかし、ユーザーがログインしているかどうかに基づいてラベルやボタンを変更するには、デフォルトページのユーザー認証の別の方法が必要です。これはクラスでは実行できません。
「FormsAuthentication.SetAuthCookie()」を使用する代わりに、そのクッキーを手動で作成する特別な理由はありますか?あなたのコードは機能するかもしれませんが、.NETはそれを行います。 (ただの観察)。 –
はい、あります - これは、すでに10kプラスのユーザーがいて、私の仕事はすべてのものを変更するものではありません。既存のデータベースでコードを動作させるだけです –
同じリクエストでCookieを作成しますか?これは動作しません。コンテキストはCookieを設定したリクエストの次のリクエストから開始します。 –