Intranet.NET MVC アプリケーションを開発しています。認証された各ユーザーに関連付けられた場所、ID 番号などのユーザーの詳細を保存する必要があります。
.NET Webform アプリケーションでは、ログインしたユーザーの詳細をセッションに保存していました。しかし、.NET MVC アプリケーションのベスト プラクティスは何ですか?
Intranet.NET MVC アプリケーションを開発しています。認証された各ユーザーに関連付けられた場所、ID 番号などのユーザーの詳細を保存する必要があります。
.NET Webform アプリケーションでは、ログインしたユーザーの詳細をセッションに保存していました。しかし、.NET MVC アプリケーションのベスト プラクティスは何ですか?
この猫の皮を剥ぐ方法はいくつかありますが、プロファイル情報をユーザーに添付するのが最もエレガントだと思います。
ユーザーのプロファイル データを保持するプロファイル プロバイダーが必要です。SQL Server には SqlProfileProvider を使用できますが、Microsoft ASP.NET Universal Providers ref: http://www.nuget.org/packages/Microsoft.AspNet.Providersを参照することをお勧めします。
Scott Hanselman からの恥知らずなコピペが続きます。ユーザーの誕生日を追跡するとします。
public class MyCustomProfile : ProfileBase
{
public DateTime? Birthdate {
get { return this["Birthdate"] as DateTime?; }
set { this["Birthdate"] = value; }
}
}
次に、web.config で設定します。
<profile inherits="MyApp.Models.MyCustomProfile" defaultprovider="DefaultProfileProvider"></profile>
最後に、現在のユーザーのカスタム プロファイルを次のように取得できます。
var customProfile = HttpContext.Profile as MyCustomProfile;
DateTime? birthday = customProfile.Birthdate;
データ ストアを設定する必要がありますが、それがほとんどの場合必要なことです。詳細については、Scott Hanselman のブログ ( http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx ) を参照してください。
MVC でセッション状態を引き続き使用できますが、お勧めできません。パターンとしての MVC は、HTTP のステートレス性を尊重します。
1 つの代替方法は、メモリに情報を格納するだけの Cache を使用することです。詳細については、SO の質問を次に示します。ASP.NET MVC がセッション状態を使用するのはなぜですか?
もう 1 つ: ASP.NET MVC でセッション状態を使用しないようにするのは良い方法ですか? はいの場合、なぜ、どのように?
「仕事には適切なツールを使用する」という格言がここに当てはまると思います。データが正しく使用されている限り、セッションにデータを保存することに問題はありません。
MVC は、短期間の状態 (ModelState および TempData) のための他のメカニズムを提供します。それらがニーズを満たしている場合は、それらを使用してください。とにかく、TempDataは舞台裏でSessionStateを使用しています(この質問が示すように)。本当に必要なのは、ユーザー セッションの期間中はデータを保持し、それ以上は保持しないことである場合、SessionSate はそのタスクに適したツールです。
キャッシュを使用することも良いですが、キャッシュの有効期限/無効化を管理する必要があります。キャッシングは、寿命が短いか長いかにかかわらず、セッションやユーザーに依存しないものに最も役立つと思います。