cakePHPのSession.startについて
cakePHPではcore.phpにSessionに関する設定項目があります。
その中の一つである、Configure::write(‘Session.start’, true)という項目があります。
これはtrueにしておくと常にsessionをスタートされた状態になります。
Sessionをほとんど使用しないシステムではfalseにする事があります。
ただ、一部のcontorllerでのみsessionを有効にしたい場合もあると思います。
そんなときはcontrollerのbeforeFilterで以下のように記述しておくと使用できます。
|
|
最初は$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時間近く悩まされてた僕は無能だと思います(´・ω・`)