なぜあなたは今までセッションストレージオブジェクト上でasp.netのViewStateのストレージ・オブジェクトを使用するのでしょうか?

StackOverflow https://stackoverflow.com/questions/575568

質問

セッションストレージは、セッション・グローバル複数のページにあるので以外に、なぜあなたは今までの値を保持するためのビューステートを使用したいのでしょうか?

クライアントからサーバに前後に、値のようないくつかの小さなクエリ文字列以外のあらゆる種類の情報を送信するために一種のばかげ。私は何の帯域幅(!)の廃棄物、単に貯蔵目的のために意味します。セッションは、複数のページにわたってグローバルながら、ビューステートに完全に代わる優れたように思えます。

特にasp.netのAJAXコントロールおよび変異体と、ビューステートはすぐにすべてのこれらの異なるコントロールとHTML要素の様々な状態変数を追跡肥大化になる可能性があります。

しかし、その後、なぜすべてのページ変数やオブジェクトのためのビューステートストレージは?あります。

たぶん私は、誰もがそこに何かを知っているん、ページのビューステートストレージのための別の偉大な使用法が欠けてる?

読んでくれてありがとう!

編集:私はあなたを選ぶしなかった場合、誰もが申し訳ありませんが、偉大な答えを持っていた。

役に立ちましたか?

解決

セッションが切れ、ViewStateがありません - あなたは時間後に戻ることができますし、あなたのビューステートがまだ利用できるようになります。あなたがウェブサイト上/前方に戻ったときにビューステートは、また、セッションの変更一貫して提供されます。

他のヒント

のViewStateやセッションのために全体の理由は、動的な、カスタマイズされた経験にステートレスなシステムからウェブを有効にすることです。ユーザーがページを要求すると、ユーザーは自分の経験でオフに左を再開することができます唯一の方法は、サーバー上またはユーザーのクライアント上のいずれかの状態を覚えておくことです。

ViewStateが、クライアント上のユーザーの状態を記憶するためのメカニズムです。 セッションは、サーバー上のユーザーの状態を記憶するためのメカニズムです。

のViewStateは一時ストレージメカニズムです。ビューステートを使用するコントロールはそれらの状態が隠し入力として、HTMLページにレンダリングされています。改ざんを防ぐために、それが署名されています。しかし、暗号化されていないので、あなたは、おそらくそこに敏感ANYTHINGを入れないようにしたいです。ビューステートを使用すると、複数の要求(ページのロード)のシリーズ全体で投稿したい場合に便利です。多分、ユーザが不正なメールアドレスか何かを入力したため、フォームが検証しないと、ユーザーが送信する前にそれがあったように、フォームを復元したい場合は、この例です。これに欠点は、ビューステートが空腹獣であり、簡単にページサイズを30から50パーセントを追加することができるということです。

セッションは、他の一方で、サーバ上に格納されています。クライアントは、メモリのブロックが彼らのサーバに伝えトークンを取得します。データが何度もユーザーに再送信されていないので、これは、ビューステートよりもはるかに安全であることができます。トレードオフは、しかしあります。サーバーはメモリ不足にすることができます。そのセッションが中断された場合や、ユーザーがデータを失う可能性があります。

一般的に、使用するには、「右」の答えはありません。それはすべてあなたが達成しようとしているのかについてです。

コントロールを行うにはほとんどのものはのViewStateを使用する必要があります。あなたはしかし、機密情報を扱っている場合、セッションを検討します。あなたはページの特定のセットのためのデータを持っている場合は、ビューステートを使用します。それはあなたがセッションconsidierあなたのサイト上でのユーザーの訪問を通じて必要があります。データの場合ます。

アプリケーションがコンピュータファームで実行されている可能性がある場合たとえば、あなたは、SQLサーバーを使用するようにセッションを設定することはできません。(またはSQL Serverを使用してパフォーマンスヒットの多すぎる)

のViewStateとセッションは異なるスコープを持っています。セッションは、重要なセッション状態データを保存するために使用されている間のViewStateは、「ポストバック」の間に、多かれ少なかれ、一時データを格納するように設計されています。私は特定の「ページセッション」に関連した状態のViewStateを使用することをお勧めします。

あなたはViewStateのの正常な動作が気に入らない場合は、

、それはあなた自身のPageStatePersisterを書いて、このオブジェクトがセッション、またはMemcachedのようなものを使用して、たとえば、永続性を実行させるために非常に簡単です。その後、完全にデフォルトの永続性のメカニズムを無効にすることができます。

すると、良いことは、あなたがシームレスにViewStateを膨満感なしに、すべてのデータのこのタイプのViewState / ControlStateを使用します.NET Frameworkの標準のWebコントロールを使用し続けることができます。サーバーメモリの永続性のメカニズムは非常に効率的な可能性があります。

そうでもないあなたの質問に直接答え、それはあなたの問題を解決する可能性があります。

あなたは、クライアントのペイロードを排除し、ビューステートサーバー側に保存することができます。

クラスに継承ページを作成し、PageStatePersisterをオーバーライドします。 http://msdn.microsoft.com/en-私たち/ライブラリ/ system.web.ui.sessionpagestatepersister.aspxする

 public class RussPage : Page
    {
         protected override PageStatePersister PageStatePersister
        {
            get
            {
                return new SessionPageStatePersister(Page);
            }
        }
    }

ViewStateのは、基本的にサーバーにアップロードされ、各要求で解析しなければならないだけで隠し入力されています。このフィールドは、一般的に、多くの場合、プログラマは穏やかに気づいていないと、自動的に移入され、そして非常に大きく成長することができます。でもブロードバンドユーザーは非常に限られたアップストリーム帯域幅を持っているので、問題を提示し、多くのサイトの場合。

すべてのユーザーがサーバーへの高速LANのアクセス権を持っていますが、セッションデータを保持するために利用可能なRAMが限られているイントラネットサイトでは、それはより多くの意味を行うことがあります。

あなたの質問への答えが、あなたの仮定の一つが間違っているわけではありません。

セッションIDがURLに渡すことができます。セッションはクッキーを必要としません。

http://msdn.microsoft.com/en-us/library /aa479314.aspxする

<sessionState cookieless="true" />

あなたは、ビューステート肥大化は、ほとんどの部分は、問題ではない、それはあなたのサーバが優れて行うことができますので、それがビューステートでページ固有のデータを格納する方が良いでしょうアプリをやっています。セッション、または任意のキャッシングと夢中になる場合は、自分自身を助け、その後、そのことについて、あなたはもっと自分を傷つけることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top