Yii

Yii xreaでリンクに追加されたPHPSESSIDセッションID

Yii のサイトにあるチュートリアルのブログが動作するようになるまで、意外とハードルが高かった。その中で、ブラウザを起動して最初にサイトを表示したとき、メニューのリンクに PHP のセッションIDが付加されてしまうのを回避するのに、時間が掛ってしまった。

xrea サーバーではセーフモードが ON にセットされている。そのためファイル出力やデータアップロードの操作で、ファイルの保護モードに引っかかる事がある(このモードは5.3.0では非推奨、6.0.0で削除のようだ)。

この回避方法は、PHP を CGIモードで動作させるようにするのが手っ取り早い。タスクの起動に時間が掛るようで嫌われることもあるようだが、そこがアクセススピードのボトルネックにならないのなら、気にする必要はないだろう。これは、.htaccess に次のように指定する。

AddHandler application/x-httpd-phpcgi .php

さて、リンクに付加されたセッションIDが表示されないようにするためには、php.ini の「use_cookies、use_only_cookies、use_trans_sid」をそれぞれ「On, On, 0」とすれば良い。で、これも .htaccess に以下のように指定した。

php_flag session.use_only_cookies on
php_value session.use_trans_sid 0

が、これがいろいろと書き変えて見るが、どーもうまくいかない。なのでこの方法は諦めることにした。

CakePHP の config/core.php のようなパラメータ設定ファイルが、Yii では config/main.php でできるようになっている。Yii でも何かできないか試したところ、コアアプリケーションコンポーネントに「session: CHttpSession(framework/web/CHttpSession.php)」が組み込まれており、「savePath」プロパティの設定でセッションデータの保存先を変更できる事が分かった。

「use_only_cookies」を指定する「set_ini」命令がないか探して見ると、同じ「CHttpSession」コンポーネントに「setCookieMode()」メソッドがあり、また「cookieMode」というプロパティもあるので、どうやら核心部に近付いてきたようだ。「cookieMode」には、「none、allow、only」の3つがありデフォルトは「allow」である。ならこれを「only」にすればいい訳だ。早速次のように「savePath」も含めて設定した。

'components'=>array(
 :
	'session'=>array(
		'cookieMode' => 'only',
		'savePath' => '/virtual/xxx/xxx',
	),
),

果たして結果は….. orz

うーん、どうしたものか。悩みながらも「setCookieMode()」メソッドを見ると「use_cookies」と「use_only_cookies」は設定しているが、「use_trans_sid」の設定がない。

     |
\  __  /
_ (m) _ピコン
   |ミ|
 /  `´  \
   ∧ ∧
  (・∀・)
  ノ(  )ヽ
   <  >

これだ!

で、「setCookieMode()」メソッドに「ini_set(‘session.use_trans_sid’, ‘0’);」を次のように追加したところ、目出度くリンクから PHPSESSID が追加されなくなった。

else if ($value==='only')
{
	ini_set('session.use_cookies', '1');
	ini_set('session.use_only_cookies', '1');
	ini_set('session.use_trans_sid', '0');
}

コアソースを弄るのはどうも、ではありますが(バージョンは yii-1.1.0.r1700)。