ECWorks Blog

ECWorks Blog

CakePHPを中心としたサイト開発情報をメインに公開。新しもの好きなので時々製品レポートなんかも。

【CakePHP】session.use_trans_sid=1をCakePHPで使う場合の注意

cake-logo「Ktai Library」をバージョンアップする際の研究で分かったことがあります。
「session.use_trans_sid=1」でクッキーが使えないブラウザ(例えばiMODE)でもセッションを使う対処をしたい場合、一部ページでセッションが切れる場合があります。
検索するとまず出てくるのが「リダイレクトをした場合」で、これはまだ一般的だと思いますが、実はそれ以外でも発生することが分かりました。

paginateを使っていない方には縁がないのかもしれませんが、CakePHPではGETパラメータを使わずにパラメータを挿入する機能があり ます。それは「/hoge/fuga/param:value」のようにコロンで区切ることで、パラメータを挿入することが出来ます。
ところが、この場合、PHP側で「別サイトへのリンク」と誤認識するようで、セッションキーをくっつけないのです。

例えば、次のようにテストをすることが出来ます。

<?php echo $html->link('これはOKな例です', array('controller' => 'hoge', 'action' => 'fuga')); ?>
<?php echo $html->link('これはNGな例です', array('controller' => 'hoge', 'action' => 'fuga'), 'param' => 'value'); ?>

いろいろなTipsを参考にしてKtaiLibraryに組み込んでみたのですが、全く想定した動作にならず、まる2日悩みました。まさかこんなオチがあったとは…
というわけで、「session.use_trans_sid」を用いてセッションを解決しようとしている場合は気をつけましょう。
基本的に、linkタグにセッションキーを手動で貼り付けるか、Router::named[‘separator’]の文字列を変更する以外の解決方法はなさそうです。
困ったなぁ…

【追記】
こちらの方で詳細を書きました。是非ご意見をお寄せください。

▼【CakePHP】namedパラメータのセパレータについて皆さんにお聞きしたいこと
http://blog.ecworks.jp/archives/531


Tagged as: , , ,

Comments are closed.