ob_end_flush()
は暗黙のセッションクローズを引き起こすようです。これは意図された動作ですか?答えは「はい」と思いますが、何とかそれを防ぐことができますか?PHP:ob_end_flush()end session
ここで私が遭遇した問題の説明です。私は、カスタムセッションハンドラを使用するフレームワークを使用していますが、私はこの場合重要ではないと思っています。実際の問題は、フレームワークコードob_end_flush()
のある時点で呼び出されたときに発生します。カスタムセッションハンドラの呼び出しを記録することによって、私はセッションの書き込みと終了がこの場合呼び出されることに気付きました。 Zend Debuggerでデバッグすることさえできないので、error_logでログするだけです。だから、ob_end_flush()
セッションとのやりとりが続けられた(私は間違っているかもしれませんが、それでもなおそうです)、その状況では、前のセッションが既に閉じられているときに、新しいIDを持つ新しいセッションが開始されます。現時点ではCookieが設定されていないため、新しいセッションに新しいIDがあります。その結果、2つの異なるIDを持つ2つの別々のセッションが得られました。
私にとって最良の解決策は、暗黙的なob_end_flush()
の動作を無効にすることですが、私はすべての回答を受け入れます。
ありがとうございます。
'ob_end_flush()'はセッションを終了しません。すべてのフレームワーク回避策なしで小さなスクリプトで確認できます – zerkms
本当に、本当ですか?それを確認する必要があります。たぶん私は間違っているが、私はob_end_flush()でブレークポイントを設定しているだけで、新しいセッションファイルが作成された直後に "ステップオーバー"キーを押す(カスタムセッションのwrite()を行う)。しかし、私はwrite()コールにはアクセスできません。なぜなら、デバッガはそこには存在しないからです。 – Stranger