ASP.net の最も魅力的な機能の 1 つはビューステートです。これは、任意のデータを永続的なメカニズムに保存する便利な方法です。実際、これは PHP の $_SESSION 配列に似ています
ただし、違いが 1 つあります。 $_SESSION はユーザーに固有ですが、ページ全体で再利用されます。 Web サイトへのウィンドウが 1 つだけの場合、2 つは同じ機能を実行します。しかし、ユーザーが複数のタブまたはウィンドウを持っている場合、$_SESSION は、通常は 2 つの連続するページの読み込みの間に変更される可能性があります。
ビューステートには 2 つの機能があります:
コントロールとフォームのプロパティの保存、任意のデータの保存ビューステートの役割は次のとおりです。ページをロードするまでの間、赤いラベルが引き続き赤であることを確認します (デフォルトで黒に戻らない)。コントロールとフォームは、これを開発者から透過的に管理します (コントロール上の目立たない ViewState プロパティを除く)。ページ オブジェクトにはビューステートもあります。これは辞書のように機能し、任意のデータを保存できるようになります。
ビューステートは魔法のようなもので、間接的にそれを実現します。これは、ブラウザー フォームの送信とユーザーが実際にアクションを実行することを区別するものです。 Prado と Fortitude は両方とも、PHP でこの機能を複製しています。
完全な例については、Fortitude Form のコードをご覧ください。しかし、今日の目的としては、PHP で単純なビューステートを作成する方法を示したかっただけです。
そうですね$_SESSION と非常によく似た方法で実行されます。オブジェクトを使用しましたが、配列でも同様に機能します。ただし、ページごとに個別のスコープを実現します。 PHP では、ページ分割の結果が $_SESSION に配置されることがよくありますが、これは、残りをブッチャリングせずに一度に 1 つのセットのみを使用できることを意味します。ページ スコープでは、あらゆる操作を自由に行うことができます。これにより、この 2 つの本当の違いが明らかになります。ログイン操作やオプションなどのグローバルなものは、$_SESSION で設定する必要があります。ローカル、ページレベル、または一時的なものは、ページのビューステートに設定する必要があります。そのスクリプトの 2 つ、3 つ、または 120 個のコピーを開いた場合でも、その数の $viewstate->count のインスタンスが維持されます。 $_SESSION は 1 つだけを維持します。
ExtremeExperts の記事で言及されているセキュリティ問題は、ASP.net と同様に PHP にも当てはまります。操作的なユーザーがビューステートをカスタムの値に設定し、アプリケーションの期待を混乱させる可能性があります。ただし、それは、ポストバックでビューステートを使用する前に、慎重な量の検証が必要であることを意味します。 ASP.net と PHP のビューステートの両方を安全にすることができます。