2009-06-29 3 views
0

セッションがタイムアウトした後にアクションを実行する必要があります。しかし、私は到来する要求なしにその行動を引き起こす方法を知りません。イベントハンドラ/リスナ/タイマーは完璧に合っていますが、PHPはこのようなことをサポートしていないので、私が望むことを達成することは本当に困難です。Session_set_save_handler close/gc

多くの検索の後、私はsession_set_save_handlerにぶつかりましたが、この方法の仕組みを完全に理解できません。実行時にcloseメソッド内でアクションをトリガするコードを記述するとどうなりますか?

私は現在のセッションソリューションをそのまま保つ必要があります。私はsession_set_save_handlerを使用することの影響をそれと一緒にどのように考えるのでしょうか? (私の現在の解決策は、セッションクッキーを設定し、セッションに名前を割り当て、セッションを開始します。ユーザーがログアウトするか、セッションタイムアウト(設定ファイルにその値が設定されている)

よろしくお願いいたします。

答えて

0

これはphpでやや難しいAFAIKです。

しかし、あなたは受動的なセッションハンドラを作成することで試すことができます:タイムスタンプに関連付けられている

  • ストアセッションID。
  • 特定のIDに関連付けられたユーザーがリクエストを行うたびに、タイムスタンプを更新します。

無効なセッションは、システムの現在のIDと各セッションIDのタイムスタンプを比較することで検出できます。与えられた閾値(例えば30分)を超えて異なるものは、亡くなったものとみなされます。次に、これらのセッションIDに独自のセーブハンドラを実行できます。

セッション終了ハンドラをすぐに実行する必要がある場合、このプロセスはリクエストが到着するたびに(任意のユーザから)実行されるため、これは機能しません。そのため、ウェブサイトのトラフィックフローに直接依存します。

しかし、15分ごとにcronジョブを設定して解決することもできます。あなたのセーブハンドラがどれほど高価かによって、受け入れられる周期性があるようです。

+0

無効なセッションは、システムの現在のIDと各セッションIDのタイムスタンプを比較することで検出できます。与えられた閾値(例えば30分)を超えて異なるものは、亡くなったものとみなされます。次に、これらのセッションIDに独自のセーブハンドラを実行できます。 しかし、これにはリクエストが必要ですか?自動的に行うことはできません。正しい? –

+0

はい、それを行う唯一の方法は、cronジョブなどを設定することによるようです。リクエスト以外で実行されたPHPコードは取得できません(cronジョブを除く)。 – azkotoki

0

PHPコードを実行するには、何らかの方法でPHPを実行する必要があります。ユーザーの要求またはcronジョブを介して。 PHP要求の実行が終了するときやsession_write_close()

このsession_set_save_handler()と呼ばれる独自の保存ハンドラを記述することができますされている場合

Aセッションは、ロケールのストレージに保存されます。

+0

このsession_set_save_handler()では、独自の保存ハンドラを作成できます。 セッションキーをデータベースに保存してセッション破棄時に削除することはどういう意味ですか? –

関連する問題