7

asp.net mvc 4 での認証に関する簡単な質問があると思います。明確でないことの 1 つは、ユーザー データを認証 Cookie に追加/シリアル化できることです。ユーザーデータを認証Cookieに入れることと、ユーザーデータをセッションに追加することの利点/トレードオフは何ですか? ユーザーに固有のものを認証 Cookie に入れる必要さえありますか? すべてのユーザー データをシリアル化して Cookie に入れ、セッションを使用してユーザー データを保存しないようにする必要がありますか?

私のアプリケーションは非常に単純で、ロールはありません。必要に応じて適切にスケーリングできるようにしたいだけです。

ここでは、ユーザーの電子メールを認証 Cookie に入れ、ユーザー オブジェクトをセッションに追加するだけです。次のコードを使用してユーザーを承認しています。

FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
      1,
      user.Email,
      DateTime.Now,
      DateTime.Now.AddMinutes(15),
      false,
      user.Email); // adding the user email in the authTicket
string encTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
Session["User"] = user; //adding user data to session
Response.Cookies.Add(faCookie);

return RedirectToAction("Summary", "Account");

どんな洞察も本当に感謝しています。ありがとう!

4

2 に答える 2

12

ASP.NET セッションの問題は、既定ではインメモリに格納されることです。これは、Web ファームで実行している場合、セッションにプロセス外永続性を使用する必要があることを意味します。そうしないと、Web ファーム全体のすべてのノードが同じ情報を持つとは限りません。そのため、フォーム認証 Cookie からユーザー データを単に読み取るよりもはるかにコストがかかる SQL サーバーでセッションを永続化する必要があります。

ASP.NET セッションに関するもう 1 つの重要な側面は、使用することに決めた場合 (個人的には使用しません)、タイムアウトがフォーム認証 Cookie のタイムアウトと同じであることを確認する必要があることです。そうしないと、Cookie の有効期限が切れる可能性がありますが、ユーザーデータがまだセッションに存在するか、さらに悪い場合、セッションは期限切れになる可能性がありますが、フォーム認証 Cookie は引き続き有効です。

したがって、結局のところ、ASP.NET セッションを使用することを決定した場合、最初に行ったよりもはるかに複雑な問題を解決する必要があります (すべての要求でユーザー情報を保持するだけでした)。

于 2013-03-14T15:18:55.927 に答える
0

考慮すべきもう 1 つのことは、プロファイルの使用です。HttpContext.Profile ビューで取得可能http://msdn.microsoft.com/en-us/library/ewfkf772%28v=vs.100%29.aspx

于 2014-04-18T22:20:50.217 に答える