2

PHPMySQLを使用してログイン システムを作成し、いつでも 1 人だけがシステムにログインできるようにしたいと考えています。同じユーザーが別のウィンドウ/セッション/場所にログインした場合、実行中の古いインスタンスを無効にし、新しいインスタンスを検証する必要があります。

セッションIDをデータベースに保存し、それをチェックして定期的に、またはデータベースアクションで常に検証し続けるルーチンによって、これを実行できることを認識しています。

検証のチェックを最小限に抑え、ユーザーが最後にログに記録された有効なログイン セッションにいるかどうかを確認するために、ページを更新するたびにクエリを実行する必要がないように、これを達成できる他の方法はありますか。

要するに、最後の有効なログイン ブラウザー ウィンドウのみが webapp に提供されるようにするためのテクニックが必要であると要約できます。

4

3 に答える 3

2

ポーリング方法は必要ありません。実際に必要なのは、ログインしているユーザーのセッション ID とそのユーザー名をデータベースに保存することだけです。

次に、ログインするたびに、ログインしているユーザーがすでにセッションを保存しているかどうかを確認します。その場合は、それを無効にして、新しくログインしたセッションをデータベースに保存します。

古いセッションがアプリに再接続しようとすると、そのセッションのデータはサーバーに保存されなくなるため、ログインできなくなります。

これに必要なのは、ポーリング方法などではなく、誰かがログインするたびに追加のチェックを行うことだけです。

于 2011-02-12T19:54:45.847 に答える
0

ユーザーがホームページのサイトをロードするたびに、ユーザーがログインしているかどうかを確認する必要があります。これは常に 1 つの SQL クエリです。したがって、セッションキーをユーザーデータとともに保存すると、セッションキーをWHERE句に追加するだけでユーザーを識別できます。このようにして、ユーザーがログインしていることを確認するための 1 つの SQL クエリしかありません。

于 2011-02-12T19:55:02.307 に答える
0

まず、セッション ポリシーを管理するデータベースを使用してこれを構築します。それがボトルネックであることが判明した場合は、最適化できます。

アプリケーションが単一のサーバーで実行されている場合、おそらく共有メモリを使用して (たとえば、APC のapc_store & apc_fetchを使用して)、プロセス間で共有できる状態情報を保存できます。これは、ユーザーIDをキーにして、最後に認識されたセッションIDを単純に保存できます。その後、現在のセッションがまだ有効かどうかをすぐに確認できます。

複数のサーバーで実行している場合は、同様のことを実現するために memcache を検討する価値があるかもしれません。

于 2011-02-12T19:57:15.177 に答える