Skip to content

Commit 18b6668

Browse files
committed
Moving tests from SessionComponent to CakeSession, as that is where the features actually are. Removing Security.level/Security::inactiveMins() calculations.
1 parent eb30c12 commit 18b6668

File tree

4 files changed

+61
-65
lines changed

4 files changed

+61
-65
lines changed

cake/libs/cake_session.php

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,15 @@ class CakeSession {
125125
*/
126126
public static $timeout = null;
127127

128+
/**
129+
* Number of requests that can occur during a session time without the session being renewed.
130+
* This feature is only used when `Session.harden` is set to true.
131+
*
132+
* @var integer
133+
* @see CakeSession::_checkValid()
134+
*/
135+
public static $requestCountdown = 10;
136+
128137
/**
129138
* Constructor.
130139
*
@@ -147,8 +156,7 @@ public static function init($base = null, $start = true) {
147156
self::start();
148157
}
149158
if (isset($_SESSION) || $start === true) {
150-
self::$sessionTime = self::$time + (Security::inactiveMins() * Configure::read('Session.timeout'));
151-
self::$security = Configure::read('Security.level');
159+
self::$sessionTime = self::$time + (Configure::read('Session.timeout') * 60);
152160
}
153161
}
154162

@@ -230,7 +238,7 @@ public static function start() {
230238
self::_configureSession();
231239
self::_startSession();
232240
$started = self::started();
233-
241+
234242
if (!self::id() && $started) {
235243
self::_checkValid();
236244
}
@@ -583,7 +591,7 @@ protected static function _getHandler($handler) {
583591
}
584592
$reflect = new ReflectionClass($class);
585593
if (!$reflect->implementsInterface('CakeSessionHandlerInterface')) {
586-
throw new Exception(__('Chosen SessionHandler does not implement CakeSessionHandlerInterface'));
594+
throw new Exception(__('Chosen SessionHandler does not implement CakeSessionHandlerInterface it cannot be used with an engine key.'));
587595
}
588596
return $class;
589597
}
@@ -689,17 +697,22 @@ protected function _startSession() {
689697
*/
690698
protected static function _checkValid() {
691699
if (self::read('Config')) {
692-
if ((Configure::read('Session.checkAgent') === false || self::$_userAgent == self::read('Config.userAgent')) && self::$time <= self::read('Config.time')) {
700+
$sessionConfig = Configure::read('Session');
701+
$checkAgent = isset($sessionConfig['checkAgent']) && $sessionConfig['checkAgent'] === true;
702+
if (
703+
($checkAgent && self::$_userAgent == self::read('Config.userAgent')) &&
704+
self::$time <= self::read('Config.time')
705+
) {
693706
$time = self::read('Config.time');
694707
self::write('Config.time', self::$sessionTime);
695-
if (Configure::read('Security.level') === 'high') {
696-
$check = self::read('Config.timeout');
708+
if (isset($sessionConfig['harden']) && $sessionConfig['harden'] === true) {
709+
$check = self::read('Config.countdown');
697710
$check -= 1;
698-
self::write('Config.timeout', $check);
711+
self::write('Config.countdown', $check);
699712

700-
if (time() > ($time - (Security::inactiveMins() * Configure::read('Session.timeout')) + 2) || $check < 1) {
713+
if (time() > ($time - ($sessionConfig['timeout'] * 60) + 2) || $check < 1) {
701714
self::renew();
702-
self::write('Config.timeout', Security::inactiveMins());
715+
self::write('Config.countdown', self::$requestCountdown);
703716
}
704717
}
705718
self::$valid = true;
@@ -711,7 +724,7 @@ protected static function _checkValid() {
711724
} else {
712725
self::write('Config.userAgent', self::$_userAgent);
713726
self::write('Config.time', self::$sessionTime);
714-
self::write('Config.timeout', Security::inactiveMins());
727+
self::write('Config.countdown', self::$requestCountdown);
715728
self::$valid = true;
716729
self::__setError(1, 'Session is valid');
717730
}

cake/libs/controller/components/session.php

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,6 @@ class SessionComponent extends Object {
4949
*/
5050
private $__bare = 0;
5151

52-
/**
53-
* Class constructor
54-
*
55-
* @param string $base The base path for the Session
56-
*/
57-
58-
public function __construct() {
59-
CakeSession::begin();
60-
}
61-
6252
/**
6353
* Startup method.
6454
*

cake/tests/cases/libs/cake_session.test.php

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ public static function teardownAfterClass() {
7878
* @access public
7979
* @return void
8080
*/
81-
function startTest() {
81+
function setup() {
82+
parent::setup();
8283
Configure::write('Session', array(
8384
'defaults' => 'php',
8485
'cookie' => 'cakephp',
@@ -98,7 +99,8 @@ function startTest() {
9899
* @access public
99100
* @return void
100101
*/
101-
function endTest() {
102+
function teardown() {
103+
parent::teardown();
102104
unset($_SESSION);
103105
@session_destroy();
104106
}
@@ -641,4 +643,37 @@ function testReadAndWriteWithDatabaseStorage() {
641643
session_write_close();
642644
}
643645

646+
/**
647+
* testSessionTimeout method
648+
*
649+
* @access public
650+
* @return void
651+
*/
652+
function testSessionTimeout() {
653+
Configure::write('debug', 2);
654+
Configure::write('Session.harden', false);
655+
656+
$timeoutSeconds = Configure::read('Session.timeout') * 60;
657+
658+
session_destroy();
659+
TestCakeSession::destroy();
660+
TestCakeSession::write('Test', 'some value');
661+
662+
$this->assertEqual(CakeSession::$sessionTime, time() + $timeoutSeconds);
663+
$this->assertEqual($_SESSION['Config']['countdown'], 10);
664+
$this->assertEqual($_SESSION['Config']['time'], CakeSession::$sessionTime);
665+
$this->assertEqual(CakeSession::$time, time());
666+
$this->assertEqual($_SESSION['Config']['time'], time() + $timeoutSeconds);
667+
668+
Configure::write('Session.harden', true);
669+
TestCakeSession::destroy();
670+
671+
TestCakeSession::write('Test', 'some value');
672+
$this->assertEqual(CakeSession::$sessionTime, time() + $timeoutSeconds);
673+
$this->assertEqual($_SESSION['Config']['countdown'], 10);
674+
$this->assertEqual($_SESSION['Config']['time'], CakeSession::$sessionTime);
675+
$this->assertEqual(CakeSession::$time, time());
676+
$this->assertEqual($_SESSION['Config']['time'], CakeSession::$time + $timeoutSeconds);
677+
}
678+
644679
}

cake/tests/cases/libs/controller/components/session.test.php

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -308,46 +308,4 @@ function testSessionDestroy() {
308308
$this->assertNull($Session->read('Test'));
309309
}
310310

311-
/**
312-
* testSessionTimeout method
313-
*
314-
* @access public
315-
* @return void
316-
*/
317-
function testSessionTimeout() {
318-
Configure::write('debug', 2);
319-
Configure::write('Security.level', 'low');
320-
321-
session_destroy();
322-
$Session =& new SessionComponent();
323-
$Session->destroy();
324-
$Session->write('Test', 'some value');
325-
326-
$this->assertEqual(CakeSession::$sessionTime, mktime() + (300 * Configure::read('Session.timeout')));
327-
$this->assertEqual($_SESSION['Config']['timeout'], 10);
328-
$this->assertEqual($_SESSION['Config']['time'], CakeSession::$sessionTime);
329-
$this->assertEqual(CakeSession::$time, mktime());
330-
$this->assertEqual($_SESSION['Config']['time'], CakeSession::$time + (Security::inactiveMins() * Configure::read('Session.timeout')));
331-
332-
Configure::write('Security.level', 'medium');
333-
$Session =& new SessionComponent();
334-
$Session->destroy();
335-
$Session->write('Test', 'some value');
336-
$this->assertEqual(CakeSession::$sessionTime, mktime() + (100 * Configure::read('Session.timeout')));
337-
$this->assertEqual($_SESSION['Config']['timeout'], 10);
338-
$this->assertEqual($_SESSION['Config']['time'], CakeSession::$sessionTime);
339-
$this->assertEqual(CakeSession::$time, mktime());
340-
$this->assertEqual($_SESSION['Config']['time'], CakeSession::$time + (Security::inactiveMins() * Configure::read('Session.timeout')));
341-
342-
Configure::write('Security.level', 'high');
343-
$Session =& new SessionComponent();
344-
$Session->destroy();
345-
$Session->write('Test', 'some value');
346-
$this->assertEqual(CakeSession::$sessionTime, mktime() + (10 * Configure::read('Session.timeout')));
347-
$this->assertEqual($_SESSION['Config']['timeout'], 10);
348-
$this->assertEqual($_SESSION['Config']['time'], $Session->sessionTime);
349-
$this->assertEqual(CakeSession::$time, mktime());
350-
$this->assertEqual($_SESSION['Config']['time'], CakeSession::$time + (Security::inactiveMins() * Configure::read('Session.timeout')));
351-
352-
}
353311
}

0 commit comments

Comments
 (0)