私はまだチャットシステムを開発しています。ユーザーがログインすると、「{ユーザー}がチャットに入った」というメッセージが表示されます。チャットに表示されます。同様に、ユーザーがログアウトすると、「{user}さんはチャットを終了しました」というメッセージが表示されます。表示されます。ユーザーが正式にページを離したか入力するかを判断する方法
これらの機能はどちらもそのまま正常に動作します。しかし、ユーザーがページを閉じたとき(メッセージを残す)といつ戻るか(メッセージを入力する)を決定したいと思います。
ややこれを達成するために、私は次のようにします。
1、メインのチャットページ(chat.php)で、私は、ユーザーが残しonpage
2と呼ばれるセッションを設定しますページ、次のスクリプトは、AJAX(jQueryの)を介してonbeforeunload
イベントで実行されます:
//setoffline.php
unset($_SESSION["onpage"]); // unset the session
if ($_POST['logout'] == "false") { // in our case, this will evaluate true
sleep(3); // halt the script for 3 seconds
if (isset($_SESSION["onpage"]) || !empty($_SESSION["onpage"]))
die();
}
}
// if continued, send the offline message
...
$_SESSION["left"] = "true";
3を、スクリプトが実行され、その後、ユーザーは3以内に返品した場合(セッションがまだ存在しているかどうかをチェックする前に、3秒間スリープ秒セッションはリセットされていました)。そうでない場合、スクリプトは完了し、離脱メッセージが送信され、セッションleft
が設定されます。
4ユーザーが戻ると、セッションleft
をチェックするonload関数がトリガされます。設定されている場合は、入力メッセージが送信され、セッションleft
は設定解除されます。
問題:今では
、私はあなたが私のアルゴリズムで問題を識別していることを確信しています。私は自分自身で多くの問題を参照してください。 1つは、sleep
関数を使用しても正しくないと思われたり、正常に動作しません。 (3秒以内に誰も返さないので)ページを閉じるときに正しく動作しますが、リフレッシュすると、ページが3秒間停止する原因となります。私は単に、ユーザーが公式に辞めて共役に戻ったときを特定する方法を必要としています。
すべてのユーザーが独自のセッションを持っていることをご存知ですか? – delueg
それは問題ではありません。ユーザーがページを閉じると、すべてのユーザーが自分のセッションヘルプを持っていることから、ユーザーはチャットを終了したことをどのように通知しますか? @delueg – Shawn31313
新しいチャットメッセージが来たら、ブラウザをどのように更新しますか?ポーリングの一種?多分、ポーリングデータは、チャットにログインしているユーザーのリストを返す可能性があります。その後、どのチャットルームからチャットを終了したかを確認することができます。 (onbeforeunloadを使用して、ユーザーをログアウトさせるコマンドを送信するか、チャットを終了したとマークする)。 –