Posted on

CakePHPのsessionがcore.phpの設定より早く消える!

CakePHPのsessionってsessionデータに作成時間を保存しておき、読み出す時にcore.phpで設定した時間が経過していないかチェックしているんですね。
サーバー設定の方はさわりに行ってないみたいです。
core.phpの

Configure::write('Session.timeout', '120');
Configure::write('Security.level', 'medium');

で3時間以上あってもサーバーの

  • session.cookie_lifetime
  • session.gc_maxlifetime

の方が短ければガーベジコレクションでsessionファイルが消えるので予想より早くログアウトしたりします。
なので
bootstrap.phpに

ini_set("session.cookie_lifetime", 100 * Configure::read('Session.timeout'));
ini_set("session.gc_maxlifetime", 100 * Configure::read('Session.timeout'));

coreの値使ってサーバー設定をcore触るだけで設定できるようにしました。
(100掛けてるのはmediumの係数の100です。session.php見ましたが定数にはなっていない感じでした。)
バージョンは1.2.6です。

Posted on

CakePHPのtextareaの最初の改行コードがなくなる!

————–
\n
\n
テキストエリア内容
————–
のデータがあった場合

$form->input('Model.field', array('type' => 'textarea'));

で表示した場合、最初の改行コードがない状態でフォームに表示されます。
(下記のように2つある改行が1つになっています)

続きを読む CakePHPのtextareaの最初の改行コードがなくなる!

Posted on

CakePHPのqueryのキャッシュでハマる

モデルのquery関数を使ってループをまわしながら最大noをとってくる処理でハマりました・・・
query関数って$sql同じだった場合勝手にキャッシュを使って前回と同じ値を返すんですね。
通常はこれを回避する為に

$this->query($sql, false);

とすることで毎回最新データを取ってきてくれます。
デフォルトでキャッシュが邪魔だったので、app_model.phpで

function query() {
$params = func_get_args();
if (empty($params[1])) {
$params[1] = false;
} else {
if (is_array($params[1]) && empty($params[2])) {
$params[2] = false;
}
}
$db =& ConnectionManager::getDataSource($this->useDbConfig);
return call_user_func_array(array(&$db, 'query'), $params);
}

query関数をオーバーライドしました。
バージョンは1.2.6です。