diff --git a/lib/classes/session/redis.php b/lib/classes/session/redis.php index 03679144caf..f70bfbdd5ce 100644 --- a/lib/classes/session/redis.php +++ b/lib/classes/session/redis.php @@ -259,8 +259,10 @@ class redis extends handler { $this->lock_session($id); } $sessiondata = $this->connection->get($id); - if ($sessiondata === false && $this->requires_write_lock()) { - $this->unlock_session($id); + if ($sessiondata === false) { + if ($this->requires_write_lock()) { + $this->unlock_session($id); + } return ''; } $this->connection->expire($id, $this->timeout); diff --git a/lib/tests/session_redis_test.php b/lib/tests/session_redis_test.php index 938491a3cb6..cadbc3b5a34 100644 --- a/lib/tests/session_redis_test.php +++ b/lib/tests/session_redis_test.php @@ -91,6 +91,14 @@ class core_session_redis_testcase extends advanced_testcase { $this->redis->close(); } + public function test_normal_session_read_only() { + $sess = new \core\session\redis(); + $sess->set_requires_write_lock(false); + $sess->init(); + $this->assertSame('', $sess->handler_read('sess1')); + $this->assertTrue($sess->handler_close()); + } + public function test_normal_session_start_stop_works() { $sess = new \core\session\redis(); $sess->init();