2

いくつかの異なるフォームを使用してさまざまなアクションを実行するアプリケーションがあります。一部のフォームは、他のフォームで送信されたデータにアクセスします。

たとえば、ユーザーがあるフォームに新しい注文を出し、別のフォームに新しいアイテムを追加すると、そのアイテムを注文に追加できます。

そのため、ユーザーが注文を追加しているときに、最初にアイテムを追加する必要があることに気付く可能性があります。したがって、注文に追加された情報を失う代わりに、当然のことながら新しいタブが開かれます。

現在$_SESSION['form']、フォーム送信後に使用する関数をフォーム処理スクリプトに知らせる変数があります。問題は、複数のタブが開いていると、この値が最後に開いたタブによって上書きされることです。これを処理する方法についていくつかのアイデアがありましたが、これまでのところ理想的なものはありません。

アイデア 1 : ハッシュ値を使用してさまざまなページの読み込みを識別し、ハッシュを隠しフィールドとして送信します

$hash = $_POST['hash'];
$form = $_SESSION[$hash]['form'];

問題: セッションのオーバーロード。このメソッドは、フォームが読み込まれるたびに新しいセッション値を作成して、フォームの送信を一意に識別します。送信時に値を設定解除できますが、フォーム ページが読み込まれて送信されない場合、またはページが更新された場合はどうなりますか。セッションをできるだけ軽くしたいと思います。

アイデア 2$_SESSION['form'] :送信をクリックしたときにAJAX を使用して値を設定する

問題: JS を使用しないユーザー。できれば JS を無効にしたいユーザーには引き続きサポートを提供できるようにしたいと考えていますが、この方法の方が少し良いかもしれません。ただし、ここでブラウザーの互換性の問題が発生する可能性があるかどうかはわかりません。

アイデア 3 : ウィンドウごとにハッシュ ID を作成する

問題: PHP はブラウザのタブを区別できません。これは、これまでで最も理想的です。

アイデア 4 : フォーム処理スクリプトを複数のファイルに分割し、使用する関数を選択するための値を不要にします。

問題: 不便ですが、この問題を処理する唯一の現実的な方法であることが判明した場合は、このアイデアを受け入れます。ただし、かなりの再構築が必要になります。

PHP でさまざまなタブとセッション情報を安全に管理する方法についてのアイデアはありますか?

4

1 に答える 1

1

これは単なる私の意見ですが、私はアイデア #1 を使用します。フォームが読み込まれるたびに、ランダムなハッシュ (time() + 乱数の md5 だけで十分です) を与えてから、それらのハッシュについていきます。一意のウィンドウ識別子です。

はい、セッションが少し肥大化する可能性がありますが、ユーザー エクスペリエンスが遅くならないのであれば、心配する必要はありません。本当に気になる場合は、(セッションで) ユーザーに対して作成したウィンドウ ID の数を追跡し、100 または 1000 に制限することができます。これにより、悪意のあるユーザーが何百万ものウィンドウを開くスクリプトを作成するのを防ぐことができます。 .

ユーザーのセッションが (ログアウトまたはブラウザを閉じることによって) 破棄されると、これらのハッシュもすべて失われることに注意してください。そして、あなたが本当に勤勉だと感じているなら、ハッシュの有効期限のシステムを持つことができます. 同様に、2 時間後にセッションから削除されます。

でも正直なところ、もし私だったら、彼らをセッションに残しておいて、心配する必要はありません。

ちょうど私の 2 セント、リチャード

于 2013-07-07T20:09:30.630 に答える