0

ログインしているユーザーがブラウザを閉じる際に問題があります。ブラウザが閉じているためにコードを実行できないため、データベースでログオンステータスを「N」に更新できません。if (!isset($_SESSION['logged in'])) {また、セッションが破棄されているため、ログインせずにページを表示できないようにするためにこのコードなどがあるため、メインページに戻ることができません。

ユーザーがログオンすると、logonstatus が「Y」に変わり、ログインした時刻が記録されます。ユーザーをログイン ページにリダイレクトし、ユーザーがページで 20 分間アイドル状態だった場合は、ログオン ステータスを変更します。また、5 分ごとに実行され、ユーザーの最後のアクティビティが 20 分を超えているかどうかを確認し、その場合、ログオンステータスが「N」になるブラウザーのクローズの問題による cron ジョブもあります。

ブラウザを閉じて再ログインするのに20分以上待たされるのは長すぎると思うので、すぐに再ログインできるようにしたいと思います。

javascript のアンロード機能について読んだことがありますが、どうやら信頼できないようです。

これについて他に方法はありますか?

4

2 に答える 2

1

ブラウザを閉じることは、常にクライアント側のアクションです。したがって、PHPが何かを行うために、アクションをサーバーに送信するにはjavascriptが必要になります。

onbeforeunloadを使用してサーバーに何かを送信できますが、実際には信頼性がありません。より信頼性の高い方法は、セッション時間を大幅に短縮し(例:2分)、30秒ごとにサーバーにajax呼び出しを行って、セッションを維持することです(サーバー/接続への影響が非常に小さいページであることを確認してください) 。リクエストが4回失敗すると、セッションは破棄されます。これで、cronジョブは2分ごとに実行でき、ユーザーはその時間だけ待つ必要があります。

もう1つの方法は、GUIDを使用してユーザーのコンピューターにCookieを保存し、「Logged='Y'」を使用してデータベースに保存することです。これで、誰かがすでにログインしているアカウントにログインしようとしたときに、同じユーザー(Cookie)であるかどうかを確認し、許可している場合は許可します。これにより、1人のユーザーが2回ログインすることが可能になりますが、誤ってではなく、より困難になります。

于 2012-11-27T10:09:53.283 に答える
1

ブラウザ ウィンドウが開いている間はセッション Cookie が存続するように、セッション Cookie の存続期間を変更する必要があります。でこれを行いsession_set_cookie_params、ライフタイムを に設定し0ます。cron スクリプトと PHP のセッション GC の最大有効期間によって、20 分が経過する前にセッションが削除されないようにすることを忘れないでください。

最後にアクセスした時刻を記録し、リクエストごとに確認するため、20 分間非アクティブになった後もユーザーをログアウトし続けることができます (セッションを破棄してログイン ページにリダイレクトするだけです)。

于 2012-11-27T10:00:34.887 に答える