33

セッションの代わりにキャッシュを使用するように ASP.NET チームが推奨したため、ここ数年、WebForm モデルでのセッションの使用を停止しました。したがって、通常、web.config でセッションをオフにします。

<sessionState mode="Off" />

しかし、この設定で ASP.NET MVC アプリケーションをテストするとSessionStateTempDataProvider、mvc フレームワーク内のクラスでエラーがスローされ、セッション状態をオンにするように求められました。セッションを使用するソースを見る:

// line 20 in SessionStateTempDataProvider.cs
Dictionary<string, object> tempDataDictionary = 
httpContext.Session[TempDataSessionStateKey] as Dictionary<string, object>; 

では、なぜ彼らはここでセッションを使用するのでしょうか? 私は何が欠けていますか?

================================================== ======

編集申し訳ありませんが、この投稿はセッションとキャッシュについて議論することを意図したものではありませんが、ASP.NET MVC のコンテキストでは、ここでセッションが使用される理由を知りたいと思っていました。このブログ投稿でも、Scott Watermasysk は、セッションをオフにすることは良い習慣であると述べています。

4

4 に答える 4

33

セッションは TempData ストアに使用されます。TempData は、特定のユーザーからの次の要求までしか持続しない、非常に制限された形式のセッション状態です。(編集MVC 2+ では、次に読み取られるまで続きます。)TempData の目的は、データを保存してからリダイレクトを実行し、保存されたデータをリダイレクト先のアクションで使用できるようにすることです。

TempData ストアに Session を使用するということは、既に Session を処理している分散キャッシュ システムが TempData に対して機能することを意味します。TempData が行う場合に Session を直接使用しないことには、いくつかの利点があります。1 つは、自分でセッションをクリーンアップする必要がないことです。TempData は自然に「期限切れ」になります。

于 2008-12-22T20:14:36.123 に答える
13

セッションの代わりにキャッシュを使用することを ASP.NET チームが推奨

@ ray247、これについての参照を提供できますか? セッションとキャッシュは本質的に異なるため、アプリケーションの要件に応じて使用する必要があります。たとえば、ユーザー固有のデータをキャッシュに保存すると、望ましくない動作が発生する可能性があります。もちろん、セッションの使用を本当に避けたい場合は、ITempDataProviderインターフェイスの独自の実装を提供できます。

于 2008-12-22T19:56:01.530 に答える
6

うーん...重いオブジェクトまたは比較的めったにアクセスされないオブジェクトの永続化について読んだことがあるかもしれません-それらをキャッシュに入れる方が間違いなく良いですが、軽いオブジェクトまたはすべての要求で必要とされるデータの場合、より良い手法はありませんそれらをセッションに入れます。

セッションを正しく使用していれば、セッションは悪ではありません。

于 2008-12-22T19:54:28.787 に答える
3

追加の考えです。TempData には独自の目的があり、MS は、TempData の永続メカニズムに関してさまざまな考え方があることを知っていました。そのため、デフォルトで永続ストアを SessionState にしました。しかし、デザインは依然として非常に柔軟です。プロジェクトのニーズとそれを導くガバナンスに基づいて、特定の要件に合わせて独自の tempdata プロバイダーを作成できます。

リソース TempDataへのポインタを次に示します。

ここでは、TempData 実装のいくつかの追加の改善点を示します 。 TempData の改善点

MS Velocity Distributed Caching を使用した別の実装を次に示します。 Velocity TempData プロバイダー

于 2010-04-17T05:18:33.440 に答える