2011-06-30 9 views
2

私は約80人のユーザーをサポートするセッションを持っています。ユーザー名をすべて印刷し、60秒ごとにページを更新したいと思います。私はページをリフレッシュする方法を知っていますが、<?php print_r($_SESSION['username']); ?>は私の個人的なセッションに関連するユーザー名だけを表示しています。ログインしているすべてのユーザーをSESSIONに印刷しますか?

+1

*約80人のユーザーをサポートするセッションがある*これはどういう意味ですか?すべてのユーザーが自分のセッションを持っています。 –

+0

すべてのデータが実際にSESSION変数に格納されていますか? – Ryan

+0

いいえ、私は私が立ち往生している場所ではありません - おそらく私はグーグルでやるべきです、誰がログインしたのかを知るためにeveryonesのセッションを表示したいのですが、 – iamwhitebox

答えて

4

残念ながら、セッション変数はそのようには機能しません。

各セッションをトラッキングするには、タイムスタンプが付いたMySQLテーブルへの各ログイン/接続を記録する方法があります。あなたの追跡ページに続いて

は、それがその後、残りの部分を選択し、非アクティブなユーザーを削除持っている:

すなわち

mysql_query("DELETE FROM sessions WHERE time < " . time() - 60); 

$result = mysql_query("SELECT * FROM sessions"); 

while ($row = mysql_fetch_assoc($result)) { 

    echo $row['username'] . "<br />"; 
} 

はその後、これまで微細なページを更新する<meta http-equiv="refresh" content="60">にトス。

4

$ _SESSIONは、ウェブサイトの各ユーザーに固有のもので、Cookieを使用します。 print_rは現在の$ _SESSIONの内容のみを表示できます。ページを更新するために、すべてのユーザーの名前とJavaScriptを知るにはデータベースが必要です。

+1

私は彼がセッションのユーザー名の文字列を質問の基本的性質のために保存していると仮定しています、METAはリフレッシュにも使用できます – Ryan

1

"memcached"のようなものを使い、そこに変数を使いたいかもしれません。

デフォルトの/ tmpフォルダではなく別のフォルダにセッションを保存すると、そのフォルダのリストを使って現在サーバに設定されているセッションの数を調べることができます。完璧な正確な数。

データベースまたはmemcachedがおそらく最も可能性の高いものです。

1

セッションデータは、アプリケーションの設定に応じてファイルに保存されます。これらのファイルは解析できます。私の意見では非常に適切な解決策ではありませんが、それはトリックを行うでしょう。

0

ログインした(またはタイムアウトした)ときに、他の情報を保存することができます。 IDの他に、時間、セッションID、IPアドレス、またはこれらの組み合わせなどがあります。それはあなたが誰がオンラインであるかをかなり良い考えを与えるでしょう。

これをさらに進めるには、各ページの最後の変更の時間を保持するフィールドを持つことができます。この値を上書きするページを表示するたびに、このフィールドを使用してログアウトせずにサイトを離れてください。たとえば、ページを30分間リフレッシュしないと、その人をサイトからログアウトすることができます。

0

私は

  • は、usersテーブルに 'オンライン' の列を追加します。
  • 誰かがログインするたびに、現在のタイムスタンプでオンライン列を設定します。
  • あなたのオンラインフレンドリストをチェックすると、パスでオンラインになったすべての人に照会します。
  • オンライン友だちリストページが60秒ごとに更新されていることを確認してください。