0

セッションではなくデータベースを使用してこれを行うことはできないと想定しています。ユーザーがサインインすると、TIMESTAMP が設定され、データベースから表示されます。その後、ユーザーがログアウトするかセッションが終了すると削除されます。コードはこれをどのように探しますか?

より良い質問は、私の論理は正しいですか? これは機能しますか?これは理にかなっていますか?

4

2 に答える 2

2

デフォルトでは、アプリケーション サーバーはセッション データをサーバー上の一時ファイルに保存します。

セッション データをデータベース テーブルに保存することで、ログインしているユーザーに関する情報を表示するインターフェイスを作成できます。それとは別に、追加してアプリケーションをスケーリングする必要がある場合、この (データベース) アプローチを使用することは非常に有利です。複数のサーバー。

このような機能を実装する最も一般的な方法の 1 つは、sessionユーザーのセッション データを含むテーブルを作成することです。これは次のようになります。

create table session (
   id number primary key, 
   data varchar(240), 
   timestamp date
);

データ列には、すべてのセッション データがシリアライズされた形式で格納されます。これは、ユーザーがデータを要求するたびにデシリアライズされます。

シリアライゼーションとデシリアライゼーションは、使用しているプラ​​ットフォームによってはサポートが組み込まれている場合があります。たとえば、PHP を使用している場合、関数session_encodesession_decodeが役立つ場合があります。

于 2012-05-26T07:36:23.983 に答える
1

ユーザーが 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))
于 2012-05-26T07:00:43.127 に答える