diff options
author | Andrey Andreev <narf@devilix.net> | 2014-10-31 22:35:32 +0100 |
---|---|---|
committer | Andrey Andreev <narf@devilix.net> | 2014-10-31 22:35:32 +0100 |
commit | 7474a6799b44e4988b6a7a4adcc2901ec0b993b4 (patch) | |
tree | 6873bef76c1efec9e72cb1a25e8fe08a385fbcf1 /system/libraries/Session/drivers/Session_database_driver.php | |
parent | c6e50989480d5e9a9847177b8dc7cefa6559329a (diff) |
#3073 (feature/session): Fix session_regenerate_id() issues
Diffstat (limited to 'system/libraries/Session/drivers/Session_database_driver.php')
-rw-r--r-- | system/libraries/Session/drivers/Session_database_driver.php | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/system/libraries/Session/drivers/Session_database_driver.php b/system/libraries/Session/drivers/Session_database_driver.php index e3a3c505e..9e74605bc 100644 --- a/system/libraries/Session/drivers/Session_database_driver.php +++ b/system/libraries/Session/drivers/Session_database_driver.php @@ -111,6 +111,9 @@ class CI_Session_database_driver extends CI_Session_driver implements SessionHan { if ($this->_get_lock($session_id) !== FALSE) { + // Needed by write() to detect session_regenerate_id() calls + $this->_session_id = $session_id; + $this->_db ->select('data') ->from($this->_config['save_path']) @@ -142,6 +145,17 @@ class CI_Session_database_driver extends CI_Session_driver implements SessionHan { return FALSE; } + // Was the ID regenerated? + elseif ($session_id !== $this->_session_id) + { + if ( ! $this->_release_lock() OR ! $this->_get_lock($session_id)) + { + return FALSE; + } + + $this->_row_exists = FALSE; + $this->_session_id = $session_id; + } if ($this->_row_exists === FALSE) { |