2011-09-14 18 views
0

私はユーザーのログインとログアウトを知る必要があります。問題はユーザーセッションのタイムアウトが発生したときです。どうすればこのアプリケーションを更新できますか?Zend Frameworkでセッション破棄を処理する方法は?

セッションが終了すると、dbテーブルを更新したいと思いますか?

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

ありがとうございます。

+0

これはどれくらい重要ですか?これを行う組み込みのメカニズムが用意されていますが、パフォーマンスと最新の情報のバランスを取る必要があります。 – Jon

+0

最新の情報を入手する必要があります。また、1人のユーザーのみがサインインできるようにする必要もあります。 – elibanon

+0

パーフェクトヒットを起こさずに最新の情報を得る方法はありません。これはHTTPセッションの仕組みです。 – Jon

答えて

0

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

1.ファイル名を指定して実行cronジョブ(決定)

あなたはできるだけ頻繁にあなたが必要として実行するcronジョブを設定することができます:あなたは2つのオプションがあります。この時点で

。これにより、所有している情報がcron間隔と同じくらい古いことが保証されます。

2.設定session.gc_probabilitysession.gc_divisor PHPオプションの設定セッションGC確率

は、セッションのクリーンアップは、すべての要求にを開始される確率を指定することができます。典型的には、これは比較的低い値(例えば1/100)である。なぜなら、サーバの負荷が非常に高い場合、それはあなたのパフォーマンスを非常に迅速に停止させる可能性があるからである。

このアプローチの利点は、サーバーが実際にユーザーに当たっていない場合にはコストがかからないことです。

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

+0

まず、あなたの答えは、セッションGCのように、私は、セッションの破壊を処理することができますありがとう、私は、例えば、DBテーブルを更新していただきありがとうございます? – elibanon

+0

@elibanon:はい、['session_set_save_handler'](http://www.php.net/manual/en/function.session-set-save-handler.php)でこれを行うことができます。しかし、すぐにそこに行かないでください、それはZFがすでにこれをしていることを100%確信しています。あなたがZFのセッションハンドラにどのように接続でき、それを使っていないのかよくわかりません。 – Jon

+0

私はこのインタフェースZend_Session_SaveHandler_Interfaceを使用しました。 – elibanon

関連する問題