0

問題は、Spring または JS を使用して、1 つのブラウザーで並行して開いた 2 つのページを区別できるかどうかです。たとえば、私は状況を望んでいません

  1. ユーザーはウィンドウ 1 を開き、セッションに保存されたオプションのリストを 1 つ表示します。
  2. ユーザーが別のページに移動し、ウィンドウ 2 を開いて同じ名前のオプションの別のリストを表示すると、セッションのオプションが上書きされます
  3. ユーザーはウィンドウ 1 に移動し、ウィンドウ 2 からオプションを指定してフォームを送信すると、ウィンドウ 1 からすべてが失われます。

並行セッションを区別するのに役立つログインやページには何もありません。そして、これを並列ページで機能させることが原則です

4

1 に答える 1

1

ウィンドウごとに異なる ID を使用できます。この ID は、フォームの非表示フィールドから取得され、ランダムに生成される場合があります。


このフォームの一意の ID を保持する隠しフィールドをフォームに追加することから始めます。

<input type="hidden" name="suffix" value="50bd324e7a" />

次に、この値を、このフォームからのすべての変数の接尾辞として使用します。セッションキーは文字列なので、値を設定/取得するためにサフィックスを追加しても問題ありません。

あなたのシナリオを使用すると、次のようになります。

  1. ユーザーはウィンドウ 1 を開き、セッションに保存されたオプションのリストを 1 つ表示します。

    サフィックスをキーに追加してデータを保存します。たとえば、 variableemailは session variable に保存されますemail_50bd324e7a

  2. ユーザーが別のページに移動し、ウィンドウ 2 を開いて同じ名前のオプションの別のリストを表示すると、セッションのオプションが上書きされます

    ここでも同じですが、フォームが異なり、id が異なるため、変数名が異なります。

  3. ユーザーはウィンドウ 1 に移動し、ウィンドウ 2 からオプションを指定してフォームを送信すると、ウィンドウ 1 からすべてが失われます。

    送信時に、隠しフィールドの値を読み取り、それを使用してセッションからデータを取得します。


もう 1 つのアプローチは、これらの一意の ID をキーとして直接使用し、キーの下にすべてのフォーム変数の配列を格納することです。考え方はかなり似ています (コードがよりクリーンになるかもしれません)。

例えば:

id を持つフォームのすべての変数は、50bd324e7aという名前のセッション変数に (マップとして) 格納されます50bd324e7a。したがって、たとえば form variable の値を取得するにはemail、呼び出しsession.getAttribute(50bd324e7a)て結果 (マップ) から key の値を取得する必要がありますemail

于 2013-10-27T14:36:45.510 に答える