2

私はちょうど問題に直面しました。私は現在、学校向けのプロジェクトに取り組んでおり、すべてのアクティブユーザーをサイドバーに表示したいと考えています(チャットと同様ですが、そうではありません)。

最初に私はこれについて考えました(擬似コード):

<?php
    ...
    class user {
        //Some instance vars.

        public function __construct(){
            //Write username in a textfile/database
        }
        public function logout {
            //Delete username from textfile/database
        }
    }
    ...
?>

問題は次のとおりです。

1)ユーザーオブジェクトは$_SESSION[]配列に格納されます。だから私は魔法の方法を使うことができません__destruct()。だから私はlogout()メソッドを作りました。(問題は解決しました^^)

2)ユーザーが同じIDで2つのデバイス(ラップトップ、スマートフォンなど)にログインし、一方のデバイスでセッションを終了したとすると、もう一方のデバイスも削除されます。

3)ユーザーはおそらくログアウトを押したくないが、ブラウザウィンドウを閉じるだけです。彼がログアウト/セッションを終了したことをどうやって知ることができますか。

PHPはこの種のタスクに最適なプログラミング言語ではないことは知っていますが、私はこのプロジェクトをPHPで実行したいと思っています。この質問がすでに行われている場合は本当に申し訳ありませんが、関連するすべての質問を注意深く検索しました。それらはすべて(多かれ少なかれ)私のものとは異なります。

前もって感謝します :)

4

1 に答える 1

2

はるかに優れたアプローチ(および通常使用されるアプローチ)は、2つの列を含むテーブルを作成することだと思います。ユーザーIDと、ユーザーがサイトで最後にアクティブだった時刻。

ログイン時、および場合によってはユーザーがページをロードしたり、サイトで重要なアクションを実行したりするたびに、このテーブルを最新の状態に保ちます。

誰がオンラインであるかを表示するには、このテーブルにクエリを実行して、過去N秒/分にアクティブだったユーザーを探します。

オプションで、最後のアクティビティが(何か> N)秒/分以上前のテーブルからユーザーを削除して、テーブルが大きくなりすぎないようにする「クリーンアップ」ジョブを追加することもできます。

于 2013-03-11T20:19:25.110 に答える