2013-03-14 18 views
6

私はasp.net mvc 4の認証に関して簡単な質問があると思います。私には分かりませんが、私はユーザーデータを追加/シリアル化できます承認クッキーに追加します。セッションにユーザーデータを追加するのではなく、認証Cookieにユーザーデータを入れることのメリット/トレードオフは何ですか?認証Cookieにユーザー固有のものを入れる必要がありますか?すべてのユーザーデータをシリアル化してクッキーに入れ、セッションを使用してユーザーデータを格納する必要はありませんか?フォーム認証クッキーのASP.NET MVCユーザーデータとセッションの追加

私のアプリケーションはとてもシンプルで、役割はありません。私はただ必要ならばそれがうまくスケールされることを確かめたい。

今のところ、私はユーザーの電子メールを認証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"); 

本当にありがとうございます。ありがとう!

答えて

12

ASP.NETセッションの問題点は、デフォルトではメモリに保存されていることです。つまり、Webファームで実行している場合は、セッションにアウトオブプロセス永続性を使用する必要があります。そうしないと、Webファームのすべてのノードで同じ情報が保持されるわけではありません。したがって、フォーム認証Cookieからユーザーデータを読み取るよりもはるかに高価なセッションをSQLサーバーに保存する必要があります。

ASP.NETセッションのもう一つの重要な点は、(個人的に私はそれを使用しないで)使用することを決心した場合、タイムアウトがフォーム認証のクッキータイムアウトと同じであることを確認する必要があります。期限切れですが、セッションにユーザーデータがまだ残っている場合や、セッションが期限切れになる場合がありますが、フォーム認証Cookieは有効です。

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

+0

多くのデータをCookieに入れても、リクエストごとに送信され、必要以上に帯域を食べる可能性があります。 –

+1

いいえ、たくさんのデータを入れてはいけません。ユーザーに関するすべてのページで使用される最小限の量のデータのみを置く必要があります。より多くのデータが必要な場合は、プロファイルプロバイダを検索して基礎となるデータストアから取得できます。また、各リクエストでデータストアへの高価な呼び出しを避けたい場合は、サーバー上のキャッシュを使用できます(ただし、ASP.NETセッションと同様の問題を解決する必要があります)。 –

関連する問題