1

チャットルームをプログラムしていますが、オンライン ユーザーとオフライン ユーザーを表示する方法が見つかりません。私はオンラインユーザーにセッションを使用しました。ユーザーのログインページが空ではなく、セッション更新データベースがオンラインである場合 1 . チャットからのユーザーのログアウトまたはブラウザーの終了を知る方法。セッション時間またはキャッチでこれを実行できることはわかっていますが、適切なコードを書くことはできません。誰でも私を助けて、ここに完全なコードを入れることができますか? ご回答ありがとうございます

オンラインでのショーの場合:

session_start();
include("config.php");
connect();
$sql="SELECT `username` FROM `user` WHERE `online`=1";
$result=mysql_query($sql) or die (mysql_error());
if(mysql_num_rows($result)>0)
{
for ($i=0;$i<mysql_num_rows($result);$i++)
{
echo ('<b style="color:green;margin-left:10px;margin-top:10px;">'.mysql_result($result,$i,0).'</b><br>');
if($_SESSION['user']!=""
}
4

2 に答える 2

1

ユーザーがしばらくサイトにいないときにステータスをオフラインに更新するスケジュールで実行されるphpスクリプトを使用できます。

これを行うには、ユーザーの状態を ajax などでサーバーに送信し、データベースに保存する必要がある場合があります。

更新しました..

js、500msごとにphpにステータスを送信するためのjquery関数。

function upd_status() {
    $.get('/php.php', function(data) {
        setTimeout(upd_status,500);
    });
}
upd_status();

php側。

// I do not know where is user id, but it should be in session
$uid = $_SESSION['user']['uid'];
settype($uid, 'int');

$sql = "UPDATE user SET status = 1, timestamp = ". time() ." WHERE id = ". $uid .";

cronスクリプトで

$sql = "UPDATE user SET status = 0 WHERE timestamp < ". (time()-60*5); 
于 2012-05-15T14:00:55.020 に答える
0

単純な「if」操作を使用して、セッション時間がリアルタイムよりも短いかどうかを確認できます。

例。

データベースでは、ユーザーの列をlast_activityにします。ユーザーがメッセージを送信して、その列を更新するクエリを作成し、最後のアクティビティをtime()で更新します。

そして、タイムアウトよりも短いデータベースからの last_activity があるかどうかを確認するだけです。この場合、タイムアウトの $timeout 変数を設定できます。コードは次のとおりです。

<?php # make while loop from users where online = 1
$last_activity_from_database = $row['last_activity']; 
$timeout                     = time()-600; # 10 minutes
if($last_activity_from_database < $timeout){
    mysql_query("UPDATE users SET online='0'");
}
?>

AJAX 呼び出しを行う必要があります。

于 2012-05-15T13:46:47.667 に答える