0

シナリオ:

別のアプリケーションのユーザーアカウントを管理する管理アプリケーションがあります。Click here to login with user1ここで、管理アプリケーションにユーザー固有のリンク(たとえば)を配置して、管理者が別のブラウザーウィンドウまたはタブ( target="_blank")でユーザーと直接ログインできるようにします。

問題:

管理者が2つ以上のリンクをクリックし、tab1=user1とtab2=user2の2つのタブを開くと、最後にクリックされたタブが他のすべてのタブのセッション変数を上書きします。確かに...それがセッションの仕組みですが、管理者が複数のタブの1つのセッションで複数のユーザーインターフェイスを管理できるようにする方法があるのでしょうか。しかし、ブラウザで特定のタブを識別する可能性がないため、「tab1ではuser1であり、tab2ではuser2がログインしています...

質問: 誰かが似たようなことをして、これを解決するという基本的な考えを共有したいと思ったことはありますか?


編集:

考えられる解決策の1つは、ユーザーIDを使用してURLにパラメーターを追加し、それをすべてのページに渡すことです。

4

1 に答える 1

4

あなたの編集が指摘しているように、これを行う方法は、ユーザーが誰であるかを指定する url 変数を使用することです。

このアプローチには、多くのセキュリティ上の問題があります。

ユーザーの最初の「ログイン」が承認されたリクエストであることを確認するために、最初のリンクが何らかのセキュリティチェックを行っていると思います。このメソッドについても同様のことを行う必要があります。最初のリクエストが次のようなものである場合、そのユーザーhttp://example.com/page.cfm?userid={id}&authtoken={encryptedtoken}ID を、管理者が偽装できる有効なユーザー ID としてセッション スコープに入れます。より多くのリンクをクリックするほど、より多くのユーザーになりすますことができます。後続のリクエストでは、リクエストをuseridセッションの許可リストと照合し、なりすましを許可または拒否します。

また、ユーザー ID が含まれるように、サイト上のすべてのリンクを更新する必要があります。これを行う簡単な方法は、チートして jQuery などを使用して、userid追加されたすべての内部 URL を書き換えることです。上記のチェックに基づいて、条件付きでその JavaScript を含めます。

最後にuserid、完全にロックダウンされたサイトでない場合は、 を含むこれらの URL が検索エンジンに表示されないようにすることをお勧めします。正規の URL を使用して を削除するuseridか、x-robots ヘッダーを設定して、 が指定されている URL をインデックスに登録しないよう検索エンジンに指示する必要がありuseridます。または両方。

これは、同じブラウザーで複数のユーザーに対して異なる「セッション」を取得する最も原始的な方法です。ただし、セッション スコープを意味のあるものに使用している場合は、各タブが他のタブを上書きしようとするため、問題が発生します。リクエストごとに通常のサイト セッション変数を上書きするか、使用するユーザー ID ごとにセッション スコープに異なる構造を作成する必要があります。これがどの程度の問題かは、アプリケーションによって異なります。

それは実行可能なことですが、おそらくあなたが望んでいたよりもはるかに多くの作業が必要です.

もう 1 つのオプションは、管理者に複数のプロファイルで Google Chromeを使用してもらい、ログイン URL をコピーして別のプロファイル ウィンドウに貼り付けることです。彼らにとっては少し不便ですが、あなたにとってははるかに少ない仕事です。

于 2012-04-20T11:37:47.580 に答える