bug #15799 [HttpFoundation] NativeSessionStorage regenerate
method wrongly sets storage as started (iambrosi)
This PR was squashed before being merged into the 2.3 branch (closes #15799). Discussion ---------- [HttpFoundation] NativeSessionStorage `regenerate` method wrongly sets storage as started | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | | License | MIT | Doc PR | This PR fixes an error when regenerating session IDs for non-active sessions. Right now, the session is flagged as _started_, no matter if the session ID was successfully regenerated or not, making the storage [unable to _start the session_](6393ec3169/src/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php (L130-L132)
) later on. This also fixes a future error with PHP 7, which throws an error if a regeneration is attempted for non-active sessions. ``` session_regenerate_id(): Cannot regenerate session id - session is not active ``` Commits -------8e6ef9c
[HttpFoundation] NativeSessionStorage method wrongly sets storage as started
This commit is contained in:
commit
3765d8a01d
@ -195,6 +195,16 @@ class NativeSessionStorage implements SessionStorageInterface
|
||||
*/
|
||||
public function regenerate($destroy = false, $lifetime = null)
|
||||
{
|
||||
// Cannot regenerate the session ID for non-active sessions.
|
||||
if (PHP_VERSION_ID >= 50400 && \PHP_SESSION_ACTIVE !== session_status()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if session ID exists in PHP 5.3
|
||||
if (PHP_VERSION_ID < 50400 && '' === session_id()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (null !== $lifetime) {
|
||||
ini_set('session.cookie_lifetime', $lifetime);
|
||||
}
|
||||
|
@ -130,6 +130,13 @@ class NativeSessionStorageTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertEquals(42, $_SESSION['_sf2_attributes']['lucky']);
|
||||
}
|
||||
|
||||
public function testRegenerationFailureDoesNotFlagStorageAsStarted()
|
||||
{
|
||||
$storage = $this->getStorage();
|
||||
$this->assertFalse($storage->regenerate());
|
||||
$this->assertFalse($storage->isStarted());
|
||||
}
|
||||
|
||||
public function testDefaultSessionCacheLimiter()
|
||||
{
|
||||
$this->iniSet('session.cache_limiter', 'nocache');
|
||||
|
Reference in New Issue
Block a user