CakePHP 1.3.3でSession.timeoutの解釈がさらにややこしくなっている件

標準

CakePHP 1.3.3が先日リリースされました。

早速変更点を確認していたのですが、app/config/core.phpのSession.timeoutのコメント内容が変更されており、おやっと思いました。

--- a/app/config/core.php
+++ b/app/config/core.php
@@ -167,7 +167,7 @@
        Configure::write('Session.cookie', 'CAKEPHP');
 /**
- * Session time out time (in seconds).
+ * Session time out time (in minutes).
  * Actual value depends on 'Security.level' setting.
  */
        Configure::write('Session.timeout', '120');

Session.timeoutの指定値が分として解釈されるようになった?

cake/libs/cake_session.phpの変更点も見てみます。

--- a/cake/libs/cake_session.php
+++ b/cake/libs/cake_session.php
/* ... 前略 ... */
@@ -460,28 +468,17 @@ class CakeSession extends Object {
  */
        function __initSession() {
                $iniSet = function_exists('ini_set');
-
                if ($iniSet && env('HTTPS')) {
                        ini_set('session.cookie_secure', 1);
                }
+               if ($iniSet && ($this->security === 'high' || $this->security === 'medium')) {
+                       ini_set('session.referer_check', $this->host);
+               }
-               switch ($this->security) {
-                       case 'high':
-                               $this->cookieLifeTime = Configure::read('Session.timeout') * Security::inactiveMins();
-                               if ($iniSet) {
-                                       ini_set('session.referer_check', $this->host);
-                               }
-                       break;
-                       case 'medium':
-                               $this->cookieLifeTime = Configure::read('Session.timeout') * Security::inactiveMins();
-                               if ($iniSet) {
-                                       ini_set('session.referer_check', $this->host);
-                               }
-                       break;
-                       case 'low':
-                       default:
-                               $this->cookieLifeTime = Configure::read('Session.timeout') * Security::inactiveMins();
-                       break;
+               if ($this->security == 'high') {
+                       $this->cookieLifeTime = 0;
+               } else {
+                       $this->cookieLifeTime = Configure::read('Session.timeout') * (Security::inactiveMins() * 60);
                }
                switch (Configure::read('Session.save')) {
/* ... 後略 ... */

Security.levelが’medium’または’low’の場合、$this->cookieLifeTimeが以前より60倍、「分」として解釈されるようになっています。
ただし、$this->cookieLifeTimeは、セッションCookieの有効期限なのでセッション自体の有効期限ではありません。

セッションの有効期限は、これまで通り

$this->sessionTime = $this->time + (Security::inactiveMins() * Configure::read('Session.timeout'));

であり、Security.levelがhighであれば「Session.timeout * 10 (秒)」、mediumであれば「Session.timeout * 100 (秒)」、lowであれば「Session.timeout * 300 (秒)」のままです。

しかし、なんで誤解を招きそうなコメント&Cookieだけ期限が延長になったんでしょうか。

コメントを残す

Page optimized by WP Minify WordPress Plugin