0

自分のサイトでオンラインになっているすべてのユーザーを表示したい (リアルタイム、他のチャット モジュールと同様)。これを行うために、以下のスクリプトを使用しています。

HTML:

<body onbeforeunload="Unload();" onmousedown="checkfunction();">

</body>

Javascript:

var doClose = false;

document.onkeydown = checkKeycode;

function checkKeycode(e){
var keycode;
if (window.event)
keycode = window.event.keyCode;
else if (e)
keycode = e.which;
 if(keycode == 17 ){
  doClose = true;
 }
}

function checkfunction(){ 
 doClose = true;
}

function Unload(){
 if(!doClose){
  set_user_log_out(<?php ehco $u_id ?>);
 }
}

機能は、set_user_log_outログアウトしたユーザーを設定することです。

上記の Java スクリプトでは、以下のシナリオを検討したいと考えていました。

  1. ユーザーはブラウザで複数のタブを開くことができます。または、複数のブラウザーを開く場合があります (同じブラウザーのみ)。
  2. ユーザーは 1 つのタブを閉じて、別のタブにアクセスできます。
  3. ユーザーは 1 つのタブをクリックして、もう一方のタブを閉じるだけです。
  4. ユーザーは、ログアウト オプションをクリックせずにブラウザを閉じることができます。
  5. ユーザーは、キーボード ショートカット (例: ctrl+ F4) を使用してブラウザを閉じることができます。

そのため、キーコード(キーボードを使用して押されたキー)もチェックしていました。しかし、このコードにはいくつかの問題があります。以下にそれらについて言及しました。

  • 複数のキーのキーコードを取得する解決策が見つかりませんでした (例: ctrl+ F4)
  • 2 つのタブを考慮して、(同じサイトの) 他の URL を入力すると、ページが Firefox に読み込まれ続けます。
  • ctrl+rは完全には機能しません。
  • サイトの他のページにアクセスしようとすると、関数が実行されるだけですset_user_log_out()(Firefox でのみ発生します)。

これに必要なものを提案してください。下記のURLも参考にさせていただきました。

Web サイトのユーザーのオンライン ステータスを追跡する方法は?

しかし、上記の URL で説明されている関数は、私のシナリオを考慮していません。

4

3 に答える 3

2

データベース内のアクティブなセッションのリストを、前回のアクティビティとともに保持する必要があります。

サーバーへのリクエストごとに、リクエストを行った特定のセッションの最後のアクティビティ時間を更新する必要があります。「オンライン ユーザー」は、このテーブルで COUNT 人です。最後のアクティビティは 1 分前です

ログアウト機能では、このテーブルから特定のセッションも削除する必要があります

于 2012-07-19T08:11:01.380 に答える
0

Jerzy が提供したアイデアを「リアルタイム」にするには、ajax を追加する必要があります。ajax を使用すると、ページを離れることなくオンライン ユーザーを確認できます。さらに、データベースに不在ステータスを追加することもできます。つまり、ユーザーがまだページにいるかどうかを確認しますが、アクションなどを行いません。これは非常に単純なアプローチです:)

于 2012-07-19T08:33:57.450 に答える