diff options
author | Jonty Sewell <jontysewell@gmail.com> | 2016-02-05 10:39:05 +0100 |
---|---|---|
committer | Jonty Sewell <jontysewell@gmail.com> | 2016-02-05 10:39:05 +0100 |
commit | 74f846890d69e6f5ff5f0bb4268539803242d015 (patch) | |
tree | ba9ba009016d2e2b4dfb23e99c0a31382e510c14 /system | |
parent | 880036d5cea0021258c43c0d0fba0e6fd9d04b69 (diff) |
Add a flag to determine whether the redis key currently exists, and if not, force creation of it at write-time
Signed-off-by: Jonty Sewell <jontysewell@gmail.com>
Diffstat (limited to 'system')
-rw-r--r-- | system/libraries/Session/drivers/Session_redis_driver.php | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/system/libraries/Session/drivers/Session_redis_driver.php b/system/libraries/Session/drivers/Session_redis_driver.php index c7c574202..e62a3c597 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 boolean + */ + protected $_key_exists = FALSE; + // ------------------------------------------------------------------------ /** @@ -189,7 +196,15 @@ 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); + + if ($session_data === FALSE) + { + // The session ID does not exist in redis yet, so set a flag to create it + $this->_key_exists = FALSE; + $session_data = ''; + } + $this->_fingerprint = md5($session_data); return $session_data; } @@ -229,7 +244,7 @@ class CI_Session_redis_driver extends CI_Session_driver implements SessionHandle 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'])) { |