web-dev-qa-db-ja.com

セッションがASP.NET MVCアプリケーションで災害となるのはなぜですか?

なぜそれが言われているのですかASP.NET MVCアプリケーションでセッション変数を使用すべきではありません?私は この答え に出くわしました。その場合、ログインユーザー情報やアカウントに関連付けられた関連データなどのリクエスト間で値をどのように維持しますか?

これは Darin の答えです。

ASP.NET MVCアプリケーションでHttpContext.Currentを使用しているのはなぜですか?絶対に使用しないでください。これは、従来のASP.NET Webフォームアプリケーションでさえ悪ですが、ASP.NET MVCでは、このすてきなWebフレームワークのすべての楽しみを奪ってしまう災害です。

35
Happy

ASP.NET MVCのようなフレームワークの基本原則の1つは、Webと同様にstatelessであるということです。 ASP.NET Web Formsは、ステートレス環境上のステートフルパラダイムを模倣する試みです。 嘘です 、言い換えれば。

ASP.NET MVCアプリケーションでSession変数を使用することは、角を馬の頭に結び付けてユニコーンと呼ぶことに少し似ています。

28
Robert Harvey

セッション状態を使用してデータを永続化することができ、TempData機能はデフォルトとしてセッションを使用してデータを永続化します。

セッションの使用を可能な限り最小化する必要があります。その理由は、セッション状態の破損を防ぐために、すべてのリクエストに対してセッションがロックされるためです。たとえば、これにより複数のAjaxリクエストがシリアル化されます。詳細情報 こちら

リクエスト間でデータを保持する代替手段を使用できます。たとえば、MVC Futuresの一部である CookieValueProvider を使用して、Cookieデータをモデルにバインドできます。また、データを非表示フィールドとして実際のDOMに保持することもできますが、データサイズがブラウザーとの間のネットワークトラフィックに反映されるため、これらをできる限り最小化する必要があります。

メインストアが遅い場合は、Webアプリケーションに別のデータストアを使用することを検討します。たとえば、SQLServer CEまたは埋め込みRavenDB。

7
lawrab