8

PHP/MySQLを使用して同時ログインを停止する方法が必要です。

現在の設定

現在、私が働いている場所で社内で構築したシステムで同じログインを共有している人が2人います。システムの性質上、両方がログインすることは望ましくありません。

私が試したこと

私ができる限りstackoverflowとgoogledに関する約10の記事。

また、ログイン時に1に設定され、ログアウト時に0に設定されたユーザーテーブルに「loggedin」フィールドを追加しようとしました。その後、ログイン時に使用されたものと同じユーザー資格情報が失敗します。

私が抱えていた問題は、ログインした人が正しくログアウトせずにブラウザをシャットダウンした場合、データベースが更新されなかったことです。次に、その人から電話がかかってきたので、データベースの値を0にリセットする必要があります。

製品は間もなく社内で約20人に展開されるため、これは今後実現不可能です。

必要なもの

私が必要としているのは、ブラウザを閉じるときにスクリプトを実行してデータベースを更新する方法を見つけることです。あるいは、サーバー上の現在のすべてのセッションを読み取る方法で、操作することもできます。

制限

私たちのホスティングプロバイダーはひどいです、そしてその後私がサーバーに加えることができるどんな変更も制限されている/不可能です。ホスティングは共有ホスティングソリューションです。

4

5 に答える 5

7

私が必要としているのは、ブラウザを閉じるときにスクリプトを実行してデータベースを更新する方法を見つけることです。

できません。

最善の解決策は、セッションIDをデータベース内のユーザーに関連付けることです。ユーザーのコンピューターのセッションIDがデータベースの最新のセッションIDと一致しない場合は、ユーザーにログインさせてデータベースを更新します。

于 2011-05-25T14:47:42.193 に答える
3

おそらくこれを裏返す必要があります。

ログインしようとしている人は新しいセッションを取得し、新しいセッションは同じユーザー名の古いセッションを無効にします(したがってそれらをログアウトします)

この方法では、一度に1人だけがログインできます。

于 2011-05-25T14:48:33.397 に答える
1

HTTPの性質上、これを行うための絶対確実な方法はありません。しかし、ある程度のラグタイムに対処できれば、解決策があります。

最善の方法は、JSスクリプトをサーバー上の「キープアライブ」スクリプトにヒットさせることです。これは30秒ごとに行います。サーバーから1分以内にクライアントからの応答がない場合は、セッションを閉じます。

于 2011-05-25T14:45:58.273 に答える
0

「loggedin」フィールドを使用できますが、別のフィールド「loggedin_timestamp」を追加します。次に、ユーザーが最後にログインした日時を確認します。

セッションの永続時間よりも長い場合は、彼が自動的に再度ログインできるようにします

于 2011-05-25T14:50:41.940 に答える
0

私はそれらを自動ログアウトするためにjquery遅延タイムアウトセッションスクリプトを使用しています。このスクリプトは、データベースセッションのタイムスタンプを変更できるphpスクリプトをコールバックします。だから、私はこのリンクがあなたを助けると思います。Jqueryのアイドルタイムアウト

于 2011-10-24T03:41:46.107 に答える