CakePHP の Session.checkAgent
CakePHP 1.3 のサイトを IE8 で閲覧するとセッションが切れてしまう問題に遭遇した。
CakePHP には、デフォルトでは、同一セッションで User-Agent が異なるリクエストがあった場合は、セキュリティ的によろしくないということで、セッションを削除してしまうことがわかった。その設定は、 config/core.php 内の Session.checkAgent 。
IE8 は、互換モードなる機能をもっており、旧バージョンをエミュレートすることができる。ただ、厄介なことにサイトを利用している途中で、モードが切り替わると User-Agent も切り替わってしまうようだ。
BTS にチケットがあった:
対策として以下の2点を考えてみた。
- Session.checkAgent を無効化 (config/core.php)
<?php Configure::write('Session.checkAgent', false);
- meta タグによるモードの指定 (layout のヘッダ部)
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Session.checkAgent を false にするのが一番手軽かも。一応、User-Agent が切り替わらないように meta タグもレイアウトのヘッダ部に追加しておいた。