0

ユーザーのログインとログアウトを知る必要があります。問題は、ユーザーセッションがタイムアウトしたときに、これを処理してアプリケーションを更新する方法です。

セッション破棄時に、たとえばdbテーブルを更新したいですか?

サーバーに多くの負荷がかかるため、cronジョブを使用しないことをお勧めします。

前もって感謝します。

4

1 に答える 1

0

一般に、パフォーマンスに大きな影響を与えることなく、すべてのユーザーのセッション状態に関する同時情報を保持する方法はありません。すでに述べたように、これは、1回のタイムアウト時にセッションを適切に終了できない結果です。

この時点で、2つのオプションがあります。

1. cronジョブを実行します(決定論的)

必要な回数だけ実行するようにcronジョブを設定できます。これにより、保持している情報がcron間隔と同じくらい古いことが保証されます。

2.セッションGCの確率を設定します

session.gc_probabilityおよびsession.gc_divisorPHPオプションを設定すると、リクエストごとにセッションのクリーンアップが開始される確率を指定できます。通常、これは比較的低い値(たとえば、1/100)です。これは、サーバーの負荷が非常に高い場合、パフォーマンスが非常に速く低下する可能性があるためです。

このアプローチの利点は、組み込みであり、サーバーが実際にユーザーに攻撃されていない場合でも費用がかからないことです。

主な欠点は、サーバー上のリクエスト/秒の数を考慮して確率を常に調整する必要があることです。これは一定ではありません。その他の欠点は、実際に機能するように要求に依存し(サーバーに誰もアクセスしない場合はセッションをクリーンアップしない)、グローバル設定(アプリケーション全体ではなくサーバー全体で機能する)であるという事実です。

于 2011-09-14T07:08:32.227 に答える