0

一度に1 人のユーザーしかホストできないプロジェクト管理アプリケーションの構築を依頼されました。誰かがログインしたときに1に設定されるstatus行をテーブルに作成するだけで、なんとかそれを行うことができました.user

現在、status = 1他のユーザーはログインできず、別のユーザーが既にアプリケーションを使用しているというエラー メッセージが表示されます。オンライン ユーザーがログアウトするとstatus、データベースの行を更新して 0 に設定し、他のユーザーが自由にログインできるようにします。

ご覧のとおり、ログアウトボタンに依存しており、多くのユーザーがその方法でログアウトするのを忘れていることを除いて、すべて正常に機能しています。タブまたはブラウザーを閉じてstatus1 のままにし、システム全体をブロックします。

セッションタイムアウトまたは経由でページを閉じるときにデータベースを更新するいくつかの方法を試しましたonunloadが、クリーンで信頼できる方法に到達できませんでした。

シングルユーザーモードと自動/スマートログアウトを同時に組み合わせたシステムを開発するにはどうすればよいですか?

ご協力いただきありがとうございます。

4

2 に答える 2

2

これを実現する唯一の方法は、ログインしたユーザーが過去X分間にアクティブであったかどうかを確認することです。新しいユーザーがログインしようとするときにこれをチェックします。前のユーザーがその期間非アクティブであった場合、データベースのステータスの設定を解除し、新しいユーザーをログインさせます。その後、前のユーザーのセッションも無効にする必要があります。戻ってくる。

セッションの終了を検出しようとしないでください。

于 2012-07-17T08:46:49.237 に答える
1

できreduce the user's Session timeoutます。PhpfromとWebserver(Apache、IIS、..)の両方で実現できると思いますが、man ページを実際に確認する必要があります。これが完了するpolling systemと、定期的にユーザーに ping を送信してユーザーの存在を確認することができます。たとえば、Ajax script一定の間隔でサイトに ping を送信するクライアント側を作成して、ユーザーのアクティブなセッションを延長することができます。ユーザーがサイトに ping を送信しなくなった場合は、タイム ウィンドウの有効期限が切れた後、自分の を設定しstatus = 0ます。それはただの考えです。詳しくはGoogleで検索してみてください。


変形例: サーバー側言語から Cookie を設定し、セッションをその Cookie に関連付けることができます。そのため、有効期限を短くしてください。次に、隠しリクエストをサーバーに定期的に送信するクライアント スクリプトを作成します。サーバーがリクエストを受信すると、Cookie を再度書き直すため、新しい時刻が最初から再び開始されます。

于 2012-07-17T09:07:14.063 に答える