携帯電話(いわゆるFP:フィーチャーフォン)向けの、Webサイトを構築中な訳だが、Cookieが使えない下位端末への対応に悪戦苦闘中。
Cookieが使えない場合はセッション情報を引き継ぐ手段としてURLにセッションIDを付与するわけだが、このセッションIDの付与処理で悩まされている。
session.use_trans_sid を 1 にするとセッションIDの付加が行われるが、このタイミングが問題。
どうも CakePHP の処理が終わった後に変換しているようで、 CakePHP で Content-Length ヘッダーが設定されたあとにセッションIDの付加が行われている。
どういう事かというと、IDがURLに付加されるとその分コンテンツのデータ量が増えるわけだが、Content-Lengthは元のまま。つまり実際よりも小さい値になってしまう。
そのため、Content-Lengthを見て律儀に処理してしまうブラウザだと(それが悪いわけではないが)、コンテンツが最後まで表示されないという問題が起こってしまう。
セッションIDが付与されないようにすればこの問題は起こらないわけだが、そうすると今度はセッション情報が引き継がれなくなってしまう。
あるいは「接続が中断されました」というエラーメッセージが表示される。
さらにややこしいのが構築しているサイトの全ページで、ページの表示ができない問題が起きないところ。
一部のページでのみ起こっている。共通なレイアウトファイルを使っているのだからどのページでも起こって良さそうなんだが…
ままならぬ。
2013/06/30 追記:
解決方法を見つけたので別記事に書きました!