2

現在、php セッション変数を使用して、サイトのユーザーページにすべてのオンライン ユーザーを表示しようとしています。これを行うには、ユーザーがログインまたはログアウトするたびに、データベースの列が「1」または「0」に設定されます。ただし、ユーザーがブラウザを閉じたときにデータベースが更新されないため、これは完全には機能しません。 (したがって、セッションを破棄します)。特定のセッションIDが設定されているかどうかを確認する別の方法はありますか?? また、Twitter と Facebook がこれをどのように処理しているか知りたいですか?

4

3 に答える 3

4

あなたはほとんどそれを持っています。大多数のサイトがこの問題に対処する方法は、あなたのようにテーブルを用意することですが、タイムスタンプをテーブルに追加し、新しいページが読み込まれるとタイムスタンプを更新します.

テーブルにクエリを実行するときは、アクティブなユーザーの最後の 5 分間などを探すだけで、そのユーザーはサイトの「ライブ」ユーザーです。

技術的には、そのテーブルに「ログイン/ログアウト」の値を保持する必要さえありません。後半 5 分以内にログインしていれば、おそらくまだログインしています。

ユーザーがそこにいるかどうかを確認するための、保証された、確実な、完全に防弾の方法はありません。ping のオンとオフを切り替えるトリッキーな JS を実行できます。さらに JS を追加して、ユーザーがページから離れたときにデータベースに警告することもできます。予期せず閉じた場合、またはそのユーザーが電源またはネットワークを失った場合。

その上、Web ブラウジングはデフォルトでステートレスであり、サーバーがコードの送信を終了した後はユーザーへの接続を維持しません。効率的にできる最善の方法は、ユーザーが何か新しいことを行ったときにテーブルを更新し、少なくとも数分間はユーザーがいると想定することです。

于 2013-09-07T12:40:51.447 に答える
2

確認していませんが、Twitter と Facebook には、おそらく定期的なハートビートとタイムアウトが組み合わされて、誰かがページを閉じたときにサーバーに通知する Javascript コードが含まれている可能性があります。

onunload イベントXMLHTTPRequestをチェックして、PHP アプリケーションにユーザーの退出を通知するリクエストを作成する方法を確認してください ( jQueryのようなライブラリを使用すると、これをより簡単に行うことができます)。

于 2013-09-07T12:48:59.433 に答える
0

フィールド「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 }?>
于 2013-09-07T14:52:36.510 に答える