ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

セッションについて

セッションをファイル保存でやらせたいと思った。で、core.phpには

/**
 * If set to false, session would not automatically be started.
 */
	define('AUTO_SESSION', true);

とデフォルトでなっていたし、ブラウザのヘッダーを見てても(LiveHTTPHeaders)、ちゃんとCookieを使ってセッションIDを送ってるっぽい。

ただ、

(app)/tmp/sessions/

に物理ファイルが作成されていない。

なんでだろー?と思ってsession.phpを読んでいたら、appのtmp/session/に保存するようにするセッションハンドラ(core.phpでCAKE_SESSION_SAVE定数で指定するやつ)は、'cake'としていすることが分かった。
で、core.phpはデフォルトでは'php'になっていて、こちらはphp.iniレベルの設定を素直に使うようになっている。


以下は1.1.19.6305でのsession.phpを調べ、CAKE_SESSION_SAVE定数の'cake'と'php'とでどうPHP.ini設定が変わるのかをまとめたもの。

'cake' でini_set()される値

session.use_trans_sid 0
url_rewriter.tags ''
session.serialize_handler 'php'
session.use_cookies 1
session.name CAKE_SESSION_COOKIE
session.cookie_lifetime $this->cookieLifeTime
session.cookie_path $this->path
session.auto_start 0
session.save_path TMP . 'sessions'

'php' でini_set()される値

session.use_trans_sid 0
session.name CAKE_SESSION_COOKIE
session.cookie_lifetime $this->cookieLifeTime
session.cookie_path $this->path

小まとめ

つまりCAKE_SESSION_SAVE定数の'php'が意味するところとは、おおよそのパラメータをphp.ini設定でカバーしますよ、という感じなのだろう。一方の'cake'が意味するところは、cakeが想定するパラメータにいろいろと調整しちゃいますよ、という感じなのだろう。
もちろん場合によっては、'php'も'cake'でもどちらも対応できないphp.ini設定が必要となる場合もあるかもしれない。use_trans_sidがやむを得ず1にする場合や、そのほかのphp.ini設定で何らかの、デフォルトの'cake'や'php'では対応しきれないシーンがあるかもしれない。
そうした場合でも、一応カスタマイズの余地は残されているので、そうした場合にはsession.phpを読むことで、どのようなファイルを作ればよいか分かることだろう。