ユーザーが接続を失ったとき、または Web サイトからログアウトしたときに、mysql テーブル フィールドの値を「オフライン」に更新したいと考えています。出来ますか?はいの場合、どのように?
3 に答える
いいえ、できません。
フィールドを使用してに設定する代わりに、フィールドにする必要がonline
あります。ユーザーがWebサイトを操作するたびに、フィールドを現在のタイムスタンプ()で更新するだけです。このフィールドを使用すると、ユーザーがアクティブになってからの経過時間を確認することで、ユーザーのステータスを推測できます(たとえば、<= 30分がオンライン、> 30分がオフライン)。offline
INT
$_SERVER['REQUEST_TIME']
PHP セッションを使用すると、ここで役立ちます。ユーザーがログインするたびに、データベース フィールドの PHP の session_id() を更新します。PHP がセッション データを tmp フォルダーに保存することは周知のとおりです。実行中のセッションの cron ジョブを使用して、このフォルダーをスキャンできます。通常、セッション ファイルは sess_session_id() のようになります。
アルゴリズムを以下に示します
- ユーザーログイン
- データベースのセッション値を更新する
- ログイン ステータスをオンラインとして更新する
1 分ごとに cron ジョブを実行し、不要な HTTP リクエストを作成する必要がないように CLI プログラムを記述します。この CLI プログラムは、セッション ID を含むテーブルをスキャンし、 tmpフォルダーで同じもの (sess_ で始まるセッション ID) を検索する必要があります。ファイルが存在する場合はユーザーがオンラインであることを意味し、ファイルが存在しない場合はユーザーがオフラインであることを意味します。
これが役立つことを願っています。
まず、PHP セッションを使用して、一意のランダム ID をすべての訪問者に割り当てます。次に、この ID、ID が作成された時刻、および最後にオンラインで表示された時刻を含む DB 行を作成します。
次に、約 60 秒ごとに、jQuery の .load() を使用してサーバーから PHP スクリプトをロードし、mysql データベースの last_seen フィールドを更新します。ジョブ完了。
オーバーフローを回避するには、cron ジョブを作成するか、ランダムを使用して、X リクエストまたは X 分ごとにデータベースをクリーンアップします。