cakephp_version:1.2.3.8166
Session.startをfalseにして明示的にセッション開始する場合は、app_controller#beforefillterでこんなことをします。
<?php
function beforeFilter() {
$this->Session->activate("your session cookie path");
}
で、こうするとこんな感じでCallされていきます。
最後の__startSession()でsession_start()してくれるので、セッション開始されてめでたしめでたし。ログイン後userというKeyでセッションに入れたとして、viewでこういうコードを書きます。
<?php
$session->check('user');
falseになります。
最初はsession_startされていないのかと思って勉強がてら丹念にSession関係のコードを追いかけていったら、しっかりsessionには入っていました。先に$_SESSION確認しろよという・・・。なんでSessionに入っているのにfalseなのよ、と。
で、なんでfalseになるかっていうと、cake/libs/view/helpers/sessionのこの辺りのコードが原因。
<?php
function __construct($base = null) {
//ココ
if (Configure::read('Session.start') === true) {
parent::__construct($base, false);
} else {
$this->__active = false;
}
}
function check($name) {
if ($this->__active === true && $this->__start()) {
return parent::check($name);
}
return false;
}
core.phpでSession.startがfalseになっていると、例えControllerでsession_start()したとしてもhelperはsessionを開始していないものとみなすことになっていた。なので、何をcheckしても常にfalseが返って来てしまいました。最も手っ取り早いのはこのHelperのコンストラクタに手を入れて$this->__active = false;をやめさせればいいんですが、helperをApp:importしてtrueにするとかしたらいいのかもしれません。
あんまり役に立ちそうにないなぁこれ。
むしろこっちのほうが使える気がする
session.startがtrueの環境で明示的にセッションCookieのパスを変えたい場合は、app_controller#beforefillterで
<?php
$this->Session->path = "your session cookie path";
とやると指定したパスでCookieが発行されます。
