スクリプトにphpログインシステムを実装しています。データベースに既存のセッションがある場合、ユーザーのログインを拒否するスクリプトを作成するにはどうすればよいですか?
例えば、
ユーザー1がシステムにログイン>ログインが承認されましたユーザー2がユーザー1と同じアカウントでシステムにログインします>別のセッションが存在するため拒否します。
それが私がそれを機能させたい方法です。
ありがとう。
セッションIDをデータベースに保存し、最後のアクセス時刻が最近の場合は、異なるsessionIDを持つユーザーのログイン試行を拒否します(前回のログイン時刻と現在の時刻の差を見つけて計算します)。ログアウト時にIDをクリアします。
ユーザーテーブルにlogged_inという名前の新しいフィールドがあるはずです。認証するときは、このフィールドの値を確認してください。
0 / falseの場合、ユーザーにログインさせ、logged_inフィールドを1/trueに設定します。
それ以外の場合、logged_inフィールドが1 / trueの場合、2番目のユーザーにログインさせないでください。
ログアウトするときは、logged_inフィールドを0/falseに設定することを忘れないでください。
良い質問。
PHPセッションを参照している場合:セッションID(および最終アクセス時間)をデータベースに保存し、最終アクセス時間が遅すぎる場合(たとえば、過去20日以内)に異なるセッションIDを持つユーザーのログイン試行を拒否できます。分)。もちろん、ログアウト時にIDをクリアします。
ただし、ユーザーがログアウトせずにブラウザを閉じてから再度開くと、一致するセッションがないため、しばらくの間(上記の20分、または任意の間隔で)ロックアウトされる可能性があることに注意してください。もうクッキー。
DBセッションを参照している場合:Setting Account Resource Limits
このリンクのようにMysqlDBでを構成する必要があります。ただし、ここでの問題は、アカウントによるサーバーへの同時接続の数がMySQL5.0.3の時点でのみ利用可能であるということです。
REAL-TIME chekingを参照している場合は、ブラウザが明示的に要求しなくても、COMETプログラミングを使用してデータをブラウザにプッシュできます。
そのために
session
データベースに値を保存する必要があります。その後、他のユーザーが同じ詳細でログインしたとき。同じログイン情報ですでに1人のユーザーがオンラインになっていることをデータベースから確認できます
たとえば、last_seenという別のフィールドをデータベースに配置します。ログインするたびに、ユーザーはリクエストを生成します-そのフィールドに現在の日付を入力するだけです。
誰かがログインしようとしたとき-ユーザーがサイトで見られたのはどれくらい前かを確認してください。セッションタイムアウト時間(デフォルトでは20分)を超える場合-ユーザーがログアウトしてログインを許可していると見なすことができます。
それ以外の場合-ログインを拒否します。
ユーザーがまだサイトを使用しているかどうかを確認することはできません。ユーザーがログイン/ログアウトするときに一部のフィールドに1/0を入力できますが、タブを閉じる前にユーザーがログアウトリンクをクリックすることを誰も保証できません。
ただし、ユーザーがログアウトリンクをクリックしたときに、その新しいフィールドをnullに設定することで、サイトの動作を改善できます。そうしないと、誰かがログアウトして再度ログインを試みたが、システムがまだ彼のアカウントを使用中として処理しているため、それができない場合があります。