1

認証Cookieを応答に追加してホームページにリダイレクトする次のコードがあります

HttpCookie authCookie = FormsAuthentication.GetAuthCookie(username, true);
Response.Cookies.Add(authCookie);
Response.Redirect("~/Home/Home.aspx");

しかし、Home.aspx では、User.Identity.IsAuthenticatedまだ false です。なぜ?

4

2 に答える 2

3

最後にそれが機能しました。ざっくり言うとこうです

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
        username,
        DateTime.Now,
        DateTime.Now.AddMinutes(30),
        isPersistent,
        userData,
        FormsAuthentication.FormsCookiePath);

      // Encrypt the ticket.
      string encTicket = FormsAuthentication.Encrypt(ticket);

      // Create the cookie.
      Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

このMSDN ページのコード サンプルに従いました。

于 2012-06-24T06:52:57.577 に答える
1

自分で応答に Cookie を追加する必要はありません。

あなたはこれをしていました:

HttpCookie authCookie = FormsAuthentication.GetAuthCookie(username, true);
Response.Cookies.Add(authCookie);
Response.Redirect("~/Home/Home.aspx");

ただし、 a を実行してGetAuthCookieから追加する代わりに、次を使用できますSetAuthCookie

HttpCookie authCookie = FormsAuthentication.SetAuthCookie(username, true);
Response.Redirect("~/Home/Home.aspx");

SetAuthCookieのMSDN ページを見ると、応答 (または URL) に Cookie を追加するだけでなく、チケットの作成と暗号化も行っていることがわかります。

指定されたユーザー名の認証チケットを作成し、応答の Cookie コレクションに追加するか、Cookie を使用しない認証を使用している場合は URL に追加します。

これがおそらく、自分で Cookie を追加しようとしてもうまくいかない理由です。

于 2012-06-24T07:59:38.887 に答える