セッションではなくデータベースを使用してこれを行うことはできないと想定しています。ユーザーがサインインすると、TIMESTAMP が設定され、データベースから表示されます。その後、ユーザーがログアウトするかセッションが終了すると削除されます。コードはこれをどのように探しますか?
より良い質問は、私の論理は正しいですか? これは機能しますか?これは理にかなっていますか?
セッションではなくデータベースを使用してこれを行うことはできないと想定しています。ユーザーがサインインすると、TIMESTAMP が設定され、データベースから表示されます。その後、ユーザーがログアウトするかセッションが終了すると削除されます。コードはこれをどのように探しますか?
より良い質問は、私の論理は正しいですか? これは機能しますか?これは理にかなっていますか?
デフォルトでは、アプリケーション サーバーはセッション データをサーバー上の一時ファイルに保存します。
セッション データをデータベース テーブルに保存することで、ログインしているユーザーに関する情報を表示するインターフェイスを作成できます。それとは別に、追加してアプリケーションをスケーリングする必要がある場合、この (データベース) アプローチを使用することは非常に有利です。複数のサーバー。
このような機能を実装する最も一般的な方法の 1 つは、session
ユーザーのセッション データを含むテーブルを作成することです。これは次のようになります。
create table session (
id number primary key,
data varchar(240),
timestamp date
);
データ列には、すべてのセッション データがシリアライズされた形式で格納されます。これは、ユーザーがデータを要求するたびにデシリアライズされます。
シリアライゼーションとデシリアライゼーションは、使用しているプラットフォームによってはサポートが組み込まれている場合があります。たとえば、PHP を使用している場合、関数session_encode
とsession_decode
が役立つ場合があります。
ユーザーが PHP でいつログアウトしたかを知ることができず、Javascript の回避策は安定したソリューションにはほど遠いものです。
あなたがしなければならないことがいくつかあります: という名前のユーザー テーブルに列を作成しlast_activity
、ユーザーがページをロードするたびに last_activity を現在の時刻に更新します。
誰がオンラインであるかのリストについては、last_activity の値が 10 分または 20 分前より新しいユーザーのデータベースを照会します。
last_activity 列を更新するには、次を使用します。
UPDATE users SET last_activity=CURRENT_TIMESTAMP() WHERE id=2
オンラインのユーザーのリストについて
SELECT * FROM users where last_activity >= (CURRENT_TIMESTAMP()-(60*20))