cakePHP2セッション問題まとめ

cakePHP2のセッションが設定したタイムアウトよりも先に切れてしまったり,アクセスするたびに再発行させたかったり,ブラウザを閉じたらセッションを切りたかったり,リンクを連打するとセッションが勝手に切れてしまったり・・・など色々な問題を抱えていた「cakePHP2セッション問題」について,とりあえず結論だけまとめておく。
以下の3ファイルに気を付ければよい。

(1) core.php

Configure::write('Session', array(
	'defaults' => 'php', // 同一サーバーに他アプリがある場合はcakeなどに
	'timeout' => 3*60, // タイムアウト[min]
	'autoRegenerate' => true, // アクセスごとにセッション再発行
	'ini' => array(
		'session.gc_maxlifetime' => 3*60*60, // GC寿命[sec](≧タイムアウト)
		'session.gc_probability' => 1,	// GC確率分子
		'session.gc_divisor' => 100,	// GC確率分母
		'session.cookie_lifetime' => 0,	// ブラウザを閉じたら終了
	),
));

(2) bootstrap.phpの先頭

// クリック連打でセッションが切れる対策
if (!isset($_SESSION)) {
	session_start();
}

(3) AppController.php beforeFilter() の先頭

// Cookieの設定
CakeSession::$requestCountdown = 1;