From 48d59d7020a70a1ccc4eefb962cb8b22d9adf55b Mon Sep 17 00:00:00 2001 From: dima Date: Sat, 27 Jun 2015 14:16:55 +0300 Subject: [PATCH 1/2] control session regenerating id by setting a flag --- src/SessionManager.php | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/SessionManager.php b/src/SessionManager.php index 9344c74f..2e435f16 100644 --- a/src/SessionManager.php +++ b/src/SessionManager.php @@ -38,6 +38,11 @@ class SessionManager extends AbstractManager */ protected $validatorChain; + /** + * @var bool Regenerate session id flag + */ + protected $regenerateSessionId = true; + /** * Constructor * @@ -284,18 +289,42 @@ public function getId() return session_id(); } + /** + * Set flag for regenerate session id + * + * @param bool $regenerateSessionId + * @return SessionManager + */ + public function setRegenerateSessionId($regenerateSessionId) + { + $this->regenerateSessionId = (bool) $regenerateSessionId; + return $this; + } + + /** + * Get flag for regenerate session id + * + * @return bool + */ + public function getRegenerateSessionId() + { + return $this->regenerateSessionId; + } + /** * Regenerate id * - * Regenerate the session ID, using session save handler's - * native ID generation Can safely be called in the middle of a session. + * Regenerate the session ID if `regenerateSessionId` is true, using session save handler's + * native ID generation. Can safely be called in the middle of a session. * * @param bool $deleteOldSession * @return SessionManager */ public function regenerateId($deleteOldSession = true) { - session_regenerate_id((bool) $deleteOldSession); + if ($this->getRegenerateSessionId()) { + session_regenerate_id((bool) $deleteOldSession); + } return $this; } From 74d21c722cbd0e558b458dc7e4ec771e1de0119a Mon Sep 17 00:00:00 2001 From: dima Date: Sat, 27 Jun 2015 19:31:33 +0300 Subject: [PATCH 2/2] test cases for control session regenerating id by setting a flag --- test/SessionManagerTest.php | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/SessionManagerTest.php b/test/SessionManagerTest.php index d8997b5c..956a005d 100644 --- a/test/SessionManagerTest.php +++ b/test/SessionManagerTest.php @@ -391,6 +391,30 @@ public function testRegenerateIdShouldWorkAfterSessionStarted() $this->assertNotSame($origId, $this->manager->getId()); } + /** + * @runInSeparateProcess + */ + public function testFlagRegenerateIdSetToTrue() + { + $this->manager->setRegenerateSessionId(true); + $this->manager->start(); + $origId = $this->manager->getId(); + $this->manager->regenerateId(); + $this->assertNotSame($origId, $this->manager->getId()); + } + + /** + * @runInSeparateProcess + */ + public function testFlagRegenerateIdSetToFalse() + { + $this->manager->setRegenerateSessionId(false); + $this->manager->start(); + $origId = $this->manager->getId(); + $this->manager->regenerateId(); + $this->assertSame($origId, $this->manager->getId()); + } + /** * @runInSeparateProcess */