2011-05-09 13 views
0

Struts 2、Spring、およびHibernateを使用するWebアプリケーションがあります。ユーザが別のブラウザにログインしたときに、あるブラウザでユーザセッションを無効にしますか?

現在、2つの異なるブラウザ(IEとFF)を使用しているユーザーは、同じアカウントに同時にログインできます。

ログインボタンを押すと、そのアカウントの他のすべてのログインを無効にする必要があります。

ユーザーがFirefox上のアカウントにログインします。同じユーザーがIEの同じアカウントにログインします。この場合、彼がIEにログインするとき、彼のFirefoxでのセッションは無効にする必要があります。

これを行う方法はありますか?

あなたは何をセッションにログインしなかったものを、ユーザーを追跡する場合は、はい、私はそれを行うことができると思う

答えて

1

キーは「同じアカウント」です。ユーザーが複数のブラウザから異なるアカウントにログインした場合、私はこれを実行しません。

ユーザーがログインすると、アカウントに関連付けられたセッション変数のランダムな値を取得します。セッションの値がこの値と異なる場合、有効なセッションではありません。

2

を助けてください。あなたは既に自分のアイデンティティを持っています。ログインするたびに、現在ログインしているすべてのユーザーとそのセッションの一覧を表示します(好きなデータ構造に保持されます)。時には便利です)、以前のセッションを無効にします。

あなたはサーバーに座っているので、好きなようにセッションを構成する権限があります。

+0

私はこの2つの方法を改善することができます。スタティックを避けるには、スプリングまたはguiceを使用してシングルトンを注入します。第2に、クラスタを持っている場合や近い将来に移動する予定がある場合は、この情報を単一サーバの外部に保存する必要があります。 Memcachedはおそらくうまくいくでしょうが、DBのように永続的なものを見ることもできます。余分なセッションを無効にすることを知らせるために、クラスタ内のすべてのサーバーを更新するメカニズムが必要です。これには、ある種のpub/subが必要な場合があります。 – rfeak

+0

はい、私はクラスタリングを考慮しないという単純な見解であることに同意します。しかし、あなたはmemcachedまたは同様のメソッドが正常に動作し、クラスターの世話をするべきであると示唆しました。セッションは設計によって複製されます(それ以外の場合、クラスタリングは機能しません)。したがって、ユーザーIDとセッションIDを関連付けることになります。 –

1

Tomasz Stanczakと合意してください。ただし、アカウントが2回目にログインするIPアドレスを確認してください。それ以外の場合は、侵入者がログインするために元のユーザーをログアウトする可能性が高いです:-)

私の意見では、ログをとる前に、他の場所(IEなど)ここに(FFと言う)。 gmailの機能(ページの下部 - アカウントアクティビティ)を見て、他のすべてのセッションを1か所からサインアウトすることができます。

+0

あなたは侵入者が2番目にログインしていると仮定しています。 –

+0

私たちは実際にそれを引き受けることはできません。侵入者が最初にログインするとアカウントは既に消えています:-)あなたは知性を追加する必要があります!それは複雑です、Gmailは私が見た複雑な認証システムの一つを持っています。 –

関連する問題