1

Symfony 2.0 と FOSUserBundle を使用して、アクセスを制限して一意にする方法を知る必要があります。

これが私が意味することです:

  1. ユーザー X が私のシステムにアクセスし、ログイン/パスワードを介してセッションを作成します
  2. そのセッションがまだ有効な状態で (セッションを閉じていないなど)、同じユーザー X が別のコンピューターまたは場所からアクセスしようとします。
  3. その場合、「そのユーザーは別のコンピューターからの有効なセッションを持っています」というメッセージで2回目のアクセスを避けるために、システムが必要です。

それは可能ですか?

4

2 に答える 2

1

ユーザー セッションがいつ破棄されたのか、または他のコンピューターからログアウトされたのかを知るための安全な方法を見つけることができた場合にのみ、それは可能で信頼できます。ユーザーからの明示的なアクションなしで発生する可能性があるため (つまり、ユーザーがブラウザーを閉じてセッションがタイムアウトした場合など)、私はそれに依存しません。もちろん、何らかの回避策 (セッションの有効期限を述語化し、ユーザーのログアウトを追跡するなど) をいつでも見つけることができますが、それでも 100% 安全ではありません。セッションが別のブラウザで開かれており、その前に人がいないため、新しいアクセスが拒否される場合を考えてみてください。

一方、Votersと、一度に 1 つのセッションのみを許可する にあるいくつかのヒントを使用して、別の方法 (新しいユーザーがログインすると、他のユーザーがログアウトする) を行うことができます。

于 2012-12-28T13:19:25.637 に答える
0

私が間違っている場合は修正してください。ただし、Chrome (および FF もそう思う) が正確な Cookie を保存し、すべての LoginHandler メソッドをスキップしてセッションを復元できるため、私がしようとしていることを最終的に行う方法はないと思います。

説明させてください。

そうです、私はあなたの回答とコメントで説明されているソリューションを実装しようとしていました (そして実際に実装しました):

  1. ユーザー X は、Safari を使用してログイン/パスワードを使用して Web サイトにアクセスします (たとえば)。
  2. ログイン日時はUser、データベースのテーブルとセッションの両方に保存されます
  3. ログアウトせずに、同じユーザー X が別のブラウザー (Chrome など) を開きます。
  4. 新しいログイン日時がデータベースと Firefox セッションで更新されます
  5. ユーザーは Safari に戻り、ページを更新しようとします。
  6. 日時がセッションに保存されているものと一致しないため、彼は例外を受け取ります

まあ...問題を解決しているように見えるので、これまでのところ素晴らしいです。

ここここで説明されているように、Chrome はセッション Cookie を適切に削除していません。そのため、ユーザーがログアウトせずにブラウザを閉じるだけで、Chrome に戻るたびに、ログイン ハンドラ、ログイン メソッドなどを経由せずにセッションが自動的に復元されます。

これにより、その「魔法の」日時キーがデータベースとセッションの両方に保存されなくなり、その結果、元の計画であったセッションを一度に 1 つだけにするという車輪にスティックが置かれます。

問題に関するこれ以上の光??

私は泣きたい :(

于 2012-12-28T22:59:09.257 に答える