1

AspNet Web アプリでカスタム認証 Cookie を扱っています。

コンポーネントを使用してasp:Login、ユーザーが認証される方法は次のとおりです。

void L_Authenticate(object sender, AuthenticateEventArgs e)
    {
        if (L.UserName == "john" && L.Password == "cookie")
        {
            FormsAuthenticationTicket ticket = 
              new FormsAuthenticationTicket(1, "john", 
                                            DateTime.Now, 
                                            DateTime.Now.AddSeconds(30),
                                            false, "");

            var cookieConnexion = new HttpCookie("myCookie");
            cookieConnexion.Value = FormsAuthentication.Encrypt(ticket);
            cookieConnexion.Expires = ticket.Expiration;
            this.Response.Cookies.Set(cookieConnexion);

            Z.Text = "<a href='/Prive/Home.aspx'>next</a>";
        }
    }

まず、設定しないe.Authenticated = true.ASPXAUTHCookieが作成されます。私はそれをしたくありません。第二に、私はしませんResponse.Redirect

現在、Global.asax では、User が current に設定されていますHttpContext

protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
   if (Request.IsAuthenticated)
   {

   }
   else
   {
        var cookie = this.Request.Cookies["myCookie"];
        if (cookie != null)
        {
           var ticket = FormsAuthentication.Decrypt(cookie.Value);

           if (ticket != null)
           {
              HttpContext.Current.User = 
                 new ClientRolePrincipal(new GenericIdentity(ticket.Name));

              ticket = new FormsAuthenticationTicket(1, ticket.Name, 
                                 DateTime.Now, 
                                 DateTime.Now.AddSeconds(30), 
                                 false, ticket.UserData);

              cookie.Value = FormsAuthentication.Encrypt(ticket);
              cookie.Expires = ticket.Expiration;
              this.Response.Cookies.Set(cookie);
            }
         }
     }
 }

アプリへの最初のリクエスト (Chrome 開発ツールを使用して、リクエスト/レスポンス ヘッダーで Cookie を追跡します):

  • 0 個の Cookie がリクエストされています
  • 応答の 0 Cookie: ASP.NET_SessionId

ユーザーのログイン:

  • リクエスト内の 1 つの Cookie: ASP.NET_SessionId
  • 応答の 1 つの Cookie: myCookie

ユーザーが Home.aspx を参照します。

  • リクエスト内の 2 つの Cookie: ASP.NET_SessionId、myCookie
  • 応答の 1 つの Cookie: myCookie (更新済み)

わかった。

ここで、PreRenderthis.Request.Cookies に含まれる要素を表示すると、 が 2 回表示されますmyCookie。なんで?

  • ASP.NET_SessionId、ドメイン「」、パス「/」、値 = nk1cy255quh32o45hxtg4x55
  • myCookie、ドメイン「」、パス「/」、値 = BF6246B7E5A5100AA59A7B7237B446...
  • myCookie、ドメイン「」、パス「/」、値 = BF6246B7E5A5100AA59A7B7237B446...
4

0 に答える 0