いくつかの異なるフォームを使用してさまざまなアクションを実行するアプリケーションがあります。一部のフォームは、他のフォームで送信されたデータにアクセスします。
たとえば、ユーザーがあるフォームに新しい注文を出し、別のフォームに新しいアイテムを追加すると、そのアイテムを注文に追加できます。
そのため、ユーザーが注文を追加しているときに、最初にアイテムを追加する必要があることに気付く可能性があります。したがって、注文に追加された情報を失う代わりに、当然のことながら新しいタブが開かれます。
現在$_SESSION['form']
、フォーム送信後に使用する関数をフォーム処理スクリプトに知らせる変数があります。問題は、複数のタブが開いていると、この値が最後に開いたタブによって上書きされることです。これを処理する方法についていくつかのアイデアがありましたが、これまでのところ理想的なものはありません。
アイデア 1 : ハッシュ値を使用してさまざまなページの読み込みを識別し、ハッシュを隠しフィールドとして送信します
$hash = $_POST['hash'];
$form = $_SESSION[$hash]['form'];
問題: セッションのオーバーロード。このメソッドは、フォームが読み込まれるたびに新しいセッション値を作成して、フォームの送信を一意に識別します。送信時に値を設定解除できますが、フォーム ページが読み込まれて送信されない場合、またはページが更新された場合はどうなりますか。セッションをできるだけ軽くしたいと思います。
アイデア 2$_SESSION['form']
:送信をクリックしたときにAJAX を使用して値を設定する
問題: JS を使用しないユーザー。できれば JS を無効にしたいユーザーには引き続きサポートを提供できるようにしたいと考えていますが、この方法の方が少し良いかもしれません。ただし、ここでブラウザーの互換性の問題が発生する可能性があるかどうかはわかりません。
アイデア 3 : ウィンドウごとにハッシュ ID を作成する
問題: PHP はブラウザのタブを区別できません。これは、これまでで最も理想的です。
アイデア 4 : フォーム処理スクリプトを複数のファイルに分割し、使用する関数を選択するための値を不要にします。
問題: 不便ですが、この問題を処理する唯一の現実的な方法であることが判明した場合は、このアイデアを受け入れます。ただし、かなりの再構築が必要になります。
PHP でさまざまなタブとセッション情報を安全に管理する方法についてのアイデアはありますか?