1

現在オンラインになっている他のユーザーをユーザーに表示する必要があります。ログインとログアウトのログを維持することができ、それに基づいてオンラインの合計人数を数えることができましたが、多くの場合、ユーザーはログアウトしないため、私の数は有効ではありません.

ユーザーがオンラインであることを示す基準は次のとおりです。

  1. ユーザーがログインしました

  2. ユーザーは現在ページを表示しています

  3. ユーザーは左側のタブを開いていますが、現在別のタブで閲覧しています

  4. 使用にはタブが開いていますが、Web ブラウザーは最小化されています

使用をオンラインで表示してはならない場合の基準は次のとおりです。

  1. ユーザーがログアウトしました。

  2. ユーザーはオンラインで表示されることを望んでいません

  3. ユーザーがタブを開いたままブラウザを閉じた

  4. ユーザーがブラウザを閉じた

これをどのように進めるかわかりません。サーバー側でphpを使用しており、データベースとしてmysqlとmongo dbを使用しています...

前もって感謝します

4

2 に答える 2

11

ユーザーが「オンライン」であることを何らかの形で確認する方法があります。それを達成するには、「オンライン」とは、通常、ユーザーがその瞬間にオンラインになっていることを指すことを理解する必要があります。これをチェックするのは簡単ではありません (あるいは不可能ですらあります) が、ユーザーが特定xの時間内に何らかのアクションを行ったかどうかをチェックすることは非常に簡単であり、ほとんどのプログラマーが選択しています。

とても簡単です:

  1. というデータベースに、ログインしているユーザーごとにフィールドを作成しますlast_activity
  2. ユーザーがページにアクセスするたびlast_activityに、現在のtime()スタンプに設定します。
  3. $xユーザーがアイドル状態 (新しいページを閲覧していない状態) でオフラインと見なされるまでの秒数を定義します。(通常は 15 分または 30 分または 1 時間です)。
  4. 次のような簡単なクエリを実行します"SELECT * FROM users WHERE last_activity >= ". (time() - $x)
  5. $xこれで、数秒以内にページを読み込んだユーザーのリストができました。

他のものとは異なり、PHP や Web ブラウザーでは、ユーザーがブラウザーでページの 1 つを閉じたことを確実に検出する方法がないため、ユーザーがいつブラウザー ウィンドウを閉じたか、または Web サイトを終了したかを知ることは技術的に不可能です。

ところで、私は嘘をつきました。方法はありますが、それは非常に高価です。サーバーをクラッシュさせる可能性があるため、よく考えてください。

  1. last_activityユーザー テーブルにフィールドを作成します (以下を参照)。
  2. 毎秒必要なJavascript コードを (AJAX を使用して) 作成しますy(update.phpほんの一例)。
  3. あなたのウェブサイトのすべてのページにその JavaScript を入れてください (yできる限り大きい数を考えてください (< 30 秒は悪いかもしれません))。
  4. 現在のスタンプupdate.phpで更新する場所を作成します。last_activitytime()
  5. $x = $y + 1オンラインの人を見つけたい場合は、使用する前と同じクエリを実行します。

最新のソリューションを使用すると、ユーザーがページにアクセスしていないときはいつでも、AJAX 呼び出しも実行していないことを確認yでき、数秒以内にオンラインと見なされなくなります。これは最初のソリューションと非常によく似たソリューションですがy、前の よりも小さく設定できますx。このようにして、ユーザーのブラウザー ウィンドウの現在の状態に関する情報が増えますが、以前よりもはるかに多くのデータベース負荷が発生します。

于 2012-04-26T16:32:26.260 に答える
1

ユーザーをオンラインに表示するほとんどすべてのサイトは、実際には「過去 X 分間にオンラインになったユーザー」を表示します。各ユーザーが最後にページを読み込んだ時間を追跡し、最後の X 分間に何人のユーザーがそれを行ったかを数えます (X は「オンライン」と見なしたいものです)。

于 2012-04-26T16:01:31.130 に答える