4

私たちのアプリケーションは、ユーザー管理のためにSymfony2.0MongoDBFOSUserBundleを使用しています。

クライアントは、アプリケーションで同時に異なるデバイスから同じユーザー名でログインすることを防ぎたいと考えています。

私たちのアイデアは、ログインが成功したときに、同じユーザーの他のすべてのセッションを無効化/削除することです。

問題は、Mongoセッションハンドラーがバージョン2.1の後半で追加されたため、セッションをDBに保存できないことです。

私たちが思いついた唯一の解決策は、ファイルシステムに保存されているセッションファイルを繰り返し処理し、ユーザーのユーザー名がそのファイルに保存されているかどうかを確認することです。その場合は、ファイルを削除するだけで、他の場所でのログインセッションが終了します。もちろん、現在のセッションも削除しないことを確認する必要があります。

誰かが問題をどのように解決できるかについてより良い考えを持っていますか?そうでない場合、知っておくべき隠れた罠はありますか?

4

1 に答える 1

4

ログイン時に現在のユーザーのIPを格納するユーザーエンティティにIPアドレス列を追加できます。(イベントリスナーを介して)ページをロードするたびに、DBに保存されているIPを、ページを要求している人のIPと照合できます。DB内のIPが現在のユーザーのIP(別の場所からログインしているユーザー)と一致しない場合は、それらをログアウトします。

さらに一歩進めるために、ajaxを介して、同じタイプのチェックを実行するサーバーにX秒ごとに呼び出しを行い、ajaxリクエストが不正な一致を返した場合にユーザーをログアウトするようにリダイレクトすることができます。

于 2012-11-28T00:04:42.393 に答える