私はイントラネットのMVCアプリケーションを開発しています。私は、認証された各ユーザーに関連付けられた場所、ID番号などのユーザーの詳細を格納する必要があります。ASP.NETイントラネットMVCアプリケーションで認証されたユーザーの詳細を維持するベストプラクティスは
.NET Webformアプリケーションでは、ログインしたユーザーの詳細をセッションに保存していました。しかし、.NET MVCアプリケーションのベストプラクティスは何ですか?
私はイントラネットのMVCアプリケーションを開発しています。私は、認証された各ユーザーに関連付けられた場所、ID番号などのユーザーの詳細を格納する必要があります。ASP.NETイントラネットMVCアプリケーションで認証されたユーザーの詳細を維持するベストプラクティスは
.NET Webformアプリケーションでは、ログインしたユーザーの詳細をセッションに保存していました。しかし、.NET MVCアプリケーションのベストプラクティスは何ですか?
MVCでセッション状態を引き続き使用できますが、お勧めできません。パターンとしてのMVCはHTTPのステートレス性を尊重します。
1つの選択肢は、情報をメモリに格納するだけのキャッシュを使用することです。ここでWhy would ASP.NET MVC use session state?
が1以上である:ここではより多くの情報を持つSO質問ですIs it a good practice to avoid using Session State in ASP.NET MVC? If yes, why and how?
はこの猫を肌するには、いくつかの方法がありますが、私は、ユーザーにプロファイル情報を付加することはほとんどだろうと主張していると思いますエレガント。
ユーザーのプロファイルデータを保持するプロファイルプロバイダが必要です。 SQL Server用のSqlProfileProviderを使用することもできますが、Microsoft ASP.NET Universal Providersを参照することをお勧めします。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>
最後に、あなたは、現在のユーザーのカスタムプロファイルに引き出すことができますwith:
var customProfile = HttpContext.Profile as MyCustomProfile;
DateTime? birthday = customProfile.Birthdate;
あなたはデータストアをセットアップする必要がありますが、それは主に何を行う必要があります。 Scott Hanselmanのブログでは、http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx
と言っていますが、ここでは「仕事に適切なツールを使用する」という言葉が当てはまると思います。正しく使用されていれば、セッションにデータを格納するのに間違ったことはありません。
MVCは、短期間の状態(ModelStateおよびTempData)のための他のメカニズムを提供します。それらがあなたの必要を満たすなら、それらを使用してください。 TempDataは、とにかくシーンの背後にあるSessionStateを使用しています(this質問が示すように)。あなたが本当に必要とするのは、ユーザーセッションの間、データが状態にとどまり、もはやSessionSateがそのタスクのための良いツールです。
キャッシュを使用することもできますが、キャッシュの有効期限/無効化を管理する必要があります。セッションやユーザーに依存しないものには、短くても長くても、キャッシングが最も役立つことがわかります。
** [この投稿を確認してください。これは役に立ちます](http://stackoverflow.com/a/17199709/2015869)** –
入力いただきありがとうございます。しかし、私はどこかで "TempDataは非常に寿命の短いインスタンスであることを前提としているため、現在のリクエストとそれ以降のリクエストでのみ使用してください。"特定のユーザーセッションでデータを維持する方法はありますか? –
Windows認証またはフォーム認証を使用していますか?あなたはデータベースを持っていますか? –