現在、php セッション変数を使用して、サイトのユーザーページにすべてのオンライン ユーザーを表示しようとしています。これを行うには、ユーザーがログインまたはログアウトするたびに、データベースの列が「1」または「0」に設定されます。ただし、ユーザーがブラウザを閉じたときにデータベースが更新されないため、これは完全には機能しません。 (したがって、セッションを破棄します)。特定のセッションIDが設定されているかどうかを確認する別の方法はありますか?? また、Twitter と Facebook がこれをどのように処理しているか知りたいですか?
3 に答える
あなたはほとんどそれを持っています。大多数のサイトがこの問題に対処する方法は、あなたのようにテーブルを用意することですが、タイムスタンプをテーブルに追加し、新しいページが読み込まれるとタイムスタンプを更新します.
テーブルにクエリを実行するときは、アクティブなユーザーの最後の 5 分間などを探すだけで、そのユーザーはサイトの「ライブ」ユーザーです。
技術的には、そのテーブルに「ログイン/ログアウト」の値を保持する必要さえありません。後半 5 分以内にログインしていれば、おそらくまだログインしています。
ユーザーがそこにいるかどうかを確認するための、保証された、確実な、完全に防弾の方法はありません。ping のオンとオフを切り替えるトリッキーな JS を実行できます。さらに JS を追加して、ユーザーがページから離れたときにデータベースに警告することもできます。予期せず閉じた場合、またはそのユーザーが電源またはネットワークを失った場合。
その上、Web ブラウジングはデフォルトでステートレスであり、サーバーがコードの送信を終了した後はユーザーへの接続を維持しません。効率的にできる最善の方法は、ユーザーが何か新しいことを行ったときにテーブルを更新し、少なくとも数分間はユーザーがいると想定することです。
確認していませんが、Twitter と Facebook には、おそらく定期的なハートビートとタイムアウトが組み合わされて、誰かがページを閉じたときにサーバーに通知する Javascript コードが含まれている可能性があります。
onunload イベントとXMLHTTPRequestをチェックして、PHP アプリケーションにユーザーの退出を通知するリクエストを作成する方法を確認してください ( jQueryのようなライブラリを使用すると、これをより簡単に行うことができます)。
フィールド「last_visit」をユーザーのテーブルに追加し、ユーザーがサイトにアクセスするたびに更新します
ユーザーがサイトにログインすると、「last_visit」時間と現在の時間が見つかり、その後、この関数を使用します
$time_period = floor(round(abs($current_time - $last_visit)/60,2));
if ($time_period <= 10)
$online_offline_status = 1;
else
$online_offline_status = 0;
}
そして、最終結果を印刷します
<?php if (
$online_offline_status == 0){ ?>
<span style="color:#FF0000;">Offline</span>
<?php } else if ($online_offline_status == 1) {?>
<span style="color:#669900;">Online</span>
<?php }?>