2

次のコード (AccountController.cs 内) を使用して、FormsAuthenticationTicket を Cookie に保存しようとしています。

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket
          (1, user.UserEmail, DateTime.Now, 
           DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes), 
           false, null);

string encTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName,
ticket.ToString());
HttpContext.Response.Cookies.Add(faCookie);

if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
           && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
           {
             return Redirect(returnUrl);
           }
           else
          {
             return RedirectToAction("Index", "Home");
          }

デバッガーをステップ実行すると、すべて問題ないように見えます。に到達するまでApplication_AuthenticateRequest、Cookie を取得しようとします。

HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];

        if (authCookie != null)
        {
         //do stuff here
        }

Cookies コレクションを見ると、何もありません。AccountController コードに別の通常の Cookie を追加すると、問題なく表示されます。UserData を含めても含めなくても問題は解決しないので、サイズの問題ではないと思います。

あなたが提供できる洞察に感謝します。

4

5 に答える 5

3

Cookie の最大サイズは 4096 バイトです。これより上にある場合、Cookie は保存されません。

以下を使用して Cookie のサイズを確認します。

int cookieSize = System.Text.UTF8Encoding.UTF8.GetByteCount(faCookie.Values.ToString());
于 2012-10-17T15:39:58.637 に答える
1

応答に Cookie を追加しています。それが完了したら、すぐにリダイレクトしたことを確認してください。Request.Cookiesコレクションからの読み取りを希望できるのは、後続の要求のみです。

于 2012-06-29T17:28:36.043 に答える
1

認証チケットは永続的で有効期限が設定されていますが、実際の Cookie には有効期限がありません。

Cookie を作成するときに、次のようなものを追加します。

var faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)
                   {
                       Expires = ticket.Expiration
                   };
于 2013-10-26T12:33:43.070 に答える