セッションに依存しないが、ポストバック間の永続性をビューステートに依存するaspxページがあるとします。
ユーザーがこのページにアクセスしていて、長い昼食のために出発した場合、ユーザーが戻ったときにビューステートは引き続き有効ですか?
PostBackプロセスの一部としてViewStateは保持されません。ただし、必要に応じて、 override PageクラスのSavePageStateToPersistenceMedium()およびLoadPageStateFromPersistenceMedium()を使用して、その動作を実装できます。詳細については、 ASP.NET ViewStateについて を参照してください。
PageViewStateはセッションに保存されるため、セッションが期限切れになると、ViewStateは失われることに注意してください。これがViewStateの有効期限が切れているとは言えませんが、はい、セッションのタイムアウト後に破棄されます。
ビューステート自体は期限切れになりません。フォームに投稿されるため、いつでも再構成できます。
MSDNによる : "。..セッションの有効期限内にページがポストバックされない場合、ビューステートが期限切れになる可能性があります」。したがって、ラウンドアバウトのような方法で、セッションが期限切れになると期限切れになる可能性がありますが、ビューステートは直接期限切れになりません。とにかくセッション状態を使用していないので、暗黙の有効期限について心配する必要はありません。
期限切れとは言わなかったことに注意してください。それは私が彼ら自身の記事で引用したMSでした Controlling ViewState
ビューステートは期限切れになりません。
すべてのビューステートデータはクライアントに保存され、ユーザーがポストバックを実行するとサーバーに送信されます。
これにはいくつかの非常に興味深い意味があり、非常に徹底的に説明されています ここ 。
また、落とし穴として、デフォルトでは、ASP.NETは自動生成されたキーでViewStateを暗号化します。これは、web.congifファイルのMachineKey要素で上書きできます。 ViewStateは期限切れになりませんが、IISリセット後、アプリケーションの再デプロイ後、またはで別のサーバーにアクセスした後など、別の自動生成キーを使用してViewStateを復号化すると、無効になる可能性があります。 Webファーム。ビューステートを長期間保存することを計画している場合は、暗号化/復号化の方法に注意してください。
はい、ViewStateは特定の条件で期限切れになります。たとえば、iframe:sを使用している場合、または定期的なポストバックを使用してサーバーへの「ライブ」接続を維持している場合。次に、このオプションを調査することをお勧めします:<sessionPageState historySize="9"/>
、これは実際にセッションに保存される「ポストバック結果」の数をハードコードします(SessionPageStatePersterが使用されている場合)。各ポストバックは、そのViewStateをSession ["__ VIEWSTATEQUEUE"]のキューの最後に格納し、「古すぎる」ViewStateを削除します。そして、SessionPageStatePersterは、web.configで任意のhistorySize-constantを構成することにより、どのViewStateが古すぎるかをどのように判断すると思いますか。この問題を見つけるのは私にとっても永遠です... asp.netプログラミングに対する私の憎しみは今では説明できません..grrr ...
ビューステートは、ページ上にある限り有効期限が切れることはなく、引き続き存在して機能します。
この古いスレッドを追体験して申し訳ありませんが、新しい情報が利用可能になりました:
はい、ViewStatesは期限切れになります。私は19時間、ViewStatesが長い時間間隔のポストバックの間に値を失う問題について調査しました。カスタムViewStateストレージ実装が採用されない限り、基本的に発生することは不可能であると言っているMSDNドキュメントとStackoverflowの回答を読むのに少し時間がかかりましたが、今ではそれは真実ではありません。
私の問題はSharePoint2013環境で発生していました。 Distributed Cache(akaAppFabric)として知られるサービスは、ViewStateのキャッシュを実行し、を持ちます。それに関連付けられている存続時間。詳細については、こちらをご覧ください: http://blogs.msdn.com/b/besidethepoint/archive/2013/03/27/appfabric-caching-and-sharepoint-1.aspx
興味深い情報は次のフレーズにあります: "ページのパフォーマンスを向上させるために、SharePoint 2013以降、SharePointはViewStateデータを転送するのではなくサーバー側にキャッシュしますクライアントに行き来します。 "
この情報が、19時間前のように必死になっている人に役立つことを願っています。
ViewStateはPOSTからPOSTまで持続します。実際には、フォームの非表示フィールド内に保存されるため、常にサーバーにPOSTされます。
セッションに依存していない限り、ページの状態を再構築するのに問題はありません。ただし、必要に応じてページの状態コードをテストするのは簡単です。web.configでセッションが60秒後に期限切れになるように設定してからページを読み込み、1分強待ちます(Stack Overflowにアクセスして、いくつかの質問に答えてください)次に、ページのボタンをクリックします。
ViewStateは、ページ自体の非表示フィールドに保持されます。ユーザーがページを持っている限り、ユーザーはViewStateを持っています。ただし、アプリが一定期間後にユーザーを自動的にログアウトする場合、ViewStateを保持してもユーザーは役に立たない可能性があります。
デフォルトでは、Viewstateは非表示の入力としてhtmlコンテンツに含まれています。つまり、有効期限はありませんが、ビューステート内のすべてのものをユーザーのブラウザからアップロードする必要があります。これは通常、公開サイトでの接続の中で最も遅い部分であるため、多くのものをビューステートに置くと、サイトが非常に遅く見える可能性があります。
簡単な答えは:いいえ。
より長い答えは次のとおりです。それはViewStateストレージの実装に依存します。一定の時間が経過すると期限切れになる可能性のあるViewStateのカスタム実装を提供できます。たとえば、ViewStateをデータベースまたはディスクに保存し、非表示フィールドに保存された値への参照のみを送信できます。次に、バッチ処理を使用して、古いViewStateデータを削除したり、要求に応じて有効期限を実行したりできます。
ビューステートは期限切れになりません。他のページにリダイレクトした後、ビューステートの値が失われるか、ビューステートが期限切れになります。詳細については http://www.c-sharpcorner.com/UploadFile/78d182/Asp-Net-state-management-techniques/