-
Notifications
You must be signed in to change notification settings - Fork 9.3k
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -180,10 +180,21 @@ public function start() | |
// Need to apply the config options so they can be ready by session_start | ||
$this->initIniOptions(); | ||
$this->registerSaveHandler(); | ||
if (isset($_SESSION['new_session_id'])) { | ||
// Not fully expired yet. Could be lost cookie by unstable network. | ||
session_commit(); | ||
This comment has been minimized.
Sorry, something went wrong. |
||
session_id($_SESSION['new_session_id']); | ||
This comment has been minimized.
Sorry, something went wrong.
sshymko
|
||
} | ||
$sid = $this->sidResolver->getSid($this); | ||
// potential custom logic for session id (ex. switching between hosts) | ||
$this->setSessionId($sid); | ||
session_start(); | ||
if (isset($_SESSION['destroyed'])) { | ||
if ($_SESSION['destroyed'] < time() - 300) { | ||
This comment has been minimized.
Sorry, something went wrong.
sshymko
|
||
$this->destroy(['clear_storage' => true]); | ||
|
||
} | ||
} | ||
$this->validator->validate($this); | ||
$this->renewCookie($sid); | ||
|
||
|
@@ -498,7 +509,31 @@ public function regenerateId() | |
return $this; | ||
} | ||
|
||
$this->isSessionExists() ? session_regenerate_id(true) : session_start(); | ||
if ($this->isSessionExists()) { | ||
//regenerate the session | ||
session_regenerate_id(); | ||
$new_session_id = session_id(); | ||
This comment has been minimized.
Sorry, something went wrong.
sshymko
|
||
|
||
$_SESSION['new_session_id'] = $new_session_id; | ||
|
||
// Set destroy timestamp | ||
$_SESSION['destroyed'] = time(); | ||
|
||
// Write and close current session; | ||
session_commit(); | ||
This comment has been minimized.
Sorry, something went wrong.
sshymko
|
||
$oldSession = $_SESSION; //called after destroy - see destroy! | ||
// Start session with new session ID | ||
session_id($new_session_id); | ||
This comment has been minimized.
Sorry, something went wrong. |
||
ini_set('session.use_strict_mode', 0); | ||
session_start(); | ||
ini_set('session.use_strict_mode', 1); | ||
This comment has been minimized.
Sorry, something went wrong.
sshymko
|
||
$_SESSION = $oldSession; | ||
// New session does not need them | ||
unset($_SESSION['destroyed']); | ||
unset($_SESSION['new_session_id']); | ||
This comment has been minimized.
Sorry, something went wrong.
sshymko
|
||
} else { | ||
session_start(); | ||
} | ||
$this->storage->init(isset($_SESSION) ? $_SESSION : []); | ||
|
||
if ($this->sessionConfig->getUseCookies()) { | ||
|
Function
session_commit()
is an alias ofsession_write_close()
encapsulated in$this->writeClose()
to be used instead of direct PHP functions.