cakePHPのSession.startについて

October 16, 2011,
tags: php


このエントリーをはてなブックマークに追加

cakePHPではcore.phpにSessionに関する設定項目があります。
その中の一つである、Configure::write(‘Session.start’, true)という項目があります。
これはtrueにしておくと常にsessionをスタートされた状態になります。

Sessionをほとんど使用しないシステムではfalseにする事があります。
ただ、一部のcontorllerでのみsessionを有効にしたい場合もあると思います。

そんなときはcontrollerのbeforeFilterで以下のように記述しておくと使用できます。

<?php
class HogeController extends AppController
{
	function beforeFilter() {
		Configure::write('Session.start',true);
		$this->Session->activate();
	}
}

最初は$this->Session->start();でいいじゃないのとかおもってSessionComponent::start()実行してもSessionComponent::setFlash()とか使えませんでした。
どうやらSessionコンポーネントのなかでSessionComponent::$activeというインスタンス変数持っているみたいで、各メソッドの実行時に$activeがtrueじゃないと実行されないようになっています。
しかもコンストラクタが実行される段階でConfigureで指定しているSession.startがtrueになってないとactiveがfalseになります。
startメソッドじたいはSessionコンポーネントの継承もとであるCakeSessionのメソッドになるのでstartメソッド実行しても
active変数はいっさい関係ないということになります。
SessionComponent::activate()メソッド実行すると再度コンストラクタが呼ばれるのでactivateを使用します。
ただ、単純にコンストラクタを実行するだけなのでその前の段階でConfigure::write(‘Session.start’,true)とやっておかないと意味がなくなる訳です。

こんな事に2時間近く悩まされてた僕は無能だと思います(´・ω・`)

comments powered by Disqus