2

したがって、基本的に、ユーザーデータベースのアクティビティ時間をチェックするcronjobがあり、ユーザーが過去10分間何もしていない場合、自動的にユーザーをログアウトし、ステータスをオフラインに設定します。

難しい部分について-ユーザーページにアクセスするたびに、データベースを更新し、新しい activityTime を挿入しています。たとえば、彼がホームページにアクセスすると、データベースが自動的に更新され、ユーザーのオンラインページに再びアクセスすると、データベースはecを更新します。これはすべてのユーザーに起こります。

問題は、他のより良い解決策はありますか、それともこれで十分でしょうか?

長期的に問題が発生する可能性はありますか?それとも、データベース接続が多すぎるために Web サイトの速度が低下する可能性はありますか?

私が言っていることを理解していただければ幸いです:)!

4

2 に答える 2

1

サイトのログインがセッション/Cookie ベースの場合、セッション/Cookie のタイムアウトを 10 分に設定し、誰かが新しいページにアクセスするたびにそのタイムアウト/有効期限を更新します。この方法はそれほど集中的ではありませんが、誰かが Cookie を変更できるほど安全ではありません。

私は過去にこれを行い、成功を収めました。

于 2012-09-24T03:53:06.433 に答える
1

基本的に、セッションを 10 分間持続させUPDATE、各ページの読み込みで簡単に送信することは大したことではありません。データベースに過負荷をかけるには、これよりもはるかに悪い方法があると断言できます。たとえば、ユーザーからの値が必要になるたびに、Cookie またはグローバル値を介してすべての値を保存するのではなく、毎回データベースから値を抽出します。

セッションごとに必要なコマンドは 1 つだけなので、このアプローチについて心配する必要はありません。一部のコードは、プログラマーが気付かないうちに、ページ要求ごとに25 個の不要なクエリを実行できます。


オンラインの数を示す数値が必要な場合は、これを cron で実行するだけです。

$str_time = date('Y-m-d H:i:s', strtotime('-10 Minutes'));

$query = $this->db->query("
SELECT COUNT(*) AS online
FROM users
WHERE last_online >= ?
", array($str_time));

if ($query->num_rows())
    $int_online = $query->row()->online;
else $int_online = 0;

// Save into database, .json file or whatever
于 2012-09-24T08:39:38.247 に答える