DB バックエンドですべてのユーザーのサイト (ログイン/ログアウト) に費やされた時間を追跡できるようにしたい所有者のメンバーベースのサイトに変更を加えています。ログインは簡単です。1 つの入力ポイント (ログイン フォーム) があるため、ログインが発生するとすぐにデータベースにスローされる可能性があります。
ただし、ログアウトは少しトリッキーです。ユーザーが「ログアウト」をクリックして、ソリューションを終了することを明示的に知らせない限り、より面倒になります (そして、ユーザーが実際にログアウトをクリックする頻度は?)。1 つの可能性 (サイトでの合計時間を追跡するという点で) は、各ページ読み込みをデータベースに登録し、それを読み込んだユーザーに関連付けることです。問題は、このサイトが会員制の動画配信サイトであり (あなたが考えているものではありません!)、最後のページビューが 20 分から 30 分の動画になる可能性が高いことです。ロードされた時間だけでなく、最後のページで費やされた時間も取得する必要があります。
私は 2 つの可能な解決策を考えましたが、どちらもそれほど洗練されたものではありません。1 つ目は、javascript を介してすべての「アンロード」イベントをトラップし、「logout.php」への呼び出しを登録することです (これは、ページがアンロードされるとすぐに XMLHttpRequest などの処理が終了しないことを前提としています)。問題は、内部リンクもアンロード イベントとして登録されるため、リンクをクリックするとユーザーがログアウトすることです (「アンロード」ハンドラのフラグをチェックし、すべての内部リンクにそのフラグを設定することができます。これは難しくありません。動的ですが、少しぎこちないです)。もう 1 つのアプローチでは、60 秒ごとに DB に ping を実行する間隔を設定する必要があります。これにより、ユーザーがまだサイトにいることがわかり、ユーザーの履歴を取得してそのセッションの合計時間を把握するときに計算を行うことができます。 ; それも一種のハックのようです。また、
この問題はそれほど珍しいことではないようで、もっと良い方法があるはずです。これを解決するためのベストプラクティスのアプローチはありますか? そうでない場合、これらのソリューションのいずれかを改善する方法はありますか?