4

PHP と MySQL を使用してログイン システムを作成しようとしています。ユーザーのログイン状態を長期間維持するために、Cookie を使用しています。Cookie にはランダムに生成された文字列があり、これもデータベースにあります。それらは相互に比較され、適切なアクションが実行されます。基本的には、標準の認証システムです。

私の問題は、複数の場所から認証の問題にアプローチする方法がよくわからないことです。ユーザーごとにランダムな文字列が 1 つしかないため、別の場所からログインすると、ある場所からログアウトされます。

私が思いつく唯一の解決策は、ユーザーの複数のログインが保存され、それぞれに個別のランダムな文字列が含まれているテーブルです。

これは正しい方法ですか?未使用のセッションはどうなりますか?

4

1 に答える 1

3

複数の場所をサポートする場合は、Cookieの値をユーザーテーブルに保持することはできません。むしろ、Cookie値とユーザーIDをそれぞれ主キーと外部キーとして使用して、新しい自動ログインテーブルを作成する必要があります。それもあなたの考えだったと思います。

次に、ハウスキーピングの目的で、ログインに最後に値が使用された時刻を記録できます。XX日を超えるものはすべて削除され、ユーザーは再度サインインする必要があります。そのためのcronジョブを設定するか、誰かがCookieを使用してサインインするたびに実行することができます。

cron削除ジョブは、より多くのレコードを処理できますが(誰もそれが完了するのを待っていないため)、最適化のために、日付フィールドにインデックスが必要です(テーブルスキャンを防ぐため)。

すべてのログインでのハウスキーピングには、そのユーザーのCookie値を照会するだけでよく、外部キー制約のおかげでルックアップが高速であるという利点があります。ただし、クリーンアップできるのは現在のユーザーのCookieのみであるため、二度と使用されないCookieを収集する可能性があります。

于 2012-11-26T02:08:57.417 に答える