diff options
author | Andrey Andreev <narf@devilix.net> | 2016-02-05 13:36:50 +0100 |
---|---|---|
committer | Andrey Andreev <narf@devilix.net> | 2016-02-05 13:36:50 +0100 |
commit | da1f7e54c5bca0e703fa2b3bc13d0fd55d16eb6c (patch) | |
tree | d1ca1787733b2f7b7ac6750d99f1de51b2516150 /system | |
parent | 7a4c44c3df834446151f4e8730aac94cee5b665a (diff) | |
parent | c07ae0888377fb434ce70d0817746962722ea3b1 (diff) |
Merge pull request #4424 from jonty-comp/develop
[ci skip] Fix PHP session_write_close() warning when writing a new session to Redis
Diffstat (limited to 'system')
-rw-r--r-- | system/libraries/Session/drivers/Session_redis_driver.php | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/system/libraries/Session/drivers/Session_redis_driver.php b/system/libraries/Session/drivers/Session_redis_driver.php index c7c574202..dc4328644 100644 --- a/system/libraries/Session/drivers/Session_redis_driver.php +++ b/system/libraries/Session/drivers/Session_redis_driver.php @@ -69,6 +69,13 @@ class CI_Session_redis_driver extends CI_Session_driver implements SessionHandle */ protected $_lock_key; + /** + * Key exists flag + * + * @var bool + */ + protected $_key_exists = FALSE; + // ------------------------------------------------------------------------ /** @@ -189,7 +196,12 @@ class CI_Session_redis_driver extends CI_Session_driver implements SessionHandle // Needed by write() to detect session_regenerate_id() calls $this->_session_id = $session_id; - $session_data = (string) $this->_redis->get($this->_key_prefix.$session_id); + $session_data = $this->_redis->get($this->_key_prefix.$session_id); + + is_string($session_data) + ? $this->_key_exists = TRUE + : $session_data = ''; + $this->_fingerprint = md5($session_data); return $session_data; } @@ -222,18 +234,19 @@ class CI_Session_redis_driver extends CI_Session_driver implements SessionHandle return $this->_failure; } - $this->_fingerprint = md5(''); + $this->_key_exists = FALSE; $this->_session_id = $session_id; } if (isset($this->_lock_key)) { $this->_redis->setTimeout($this->_lock_key, 300); - if ($this->_fingerprint !== ($fingerprint = md5($session_data))) + if ($this->_fingerprint !== ($fingerprint = md5($session_data)) OR $this->_key_exists === FALSE) { if ($this->_redis->set($this->_key_prefix.$session_id, $session_data, $this->_config['expiration'])) { $this->_fingerprint = $fingerprint; + $this->_key_exists = TRUE; return $this->_success; } |