summaryrefslogtreecommitdiffstats
path: root/system/libraries/Session/drivers/Session_database_driver.php
diff options
context:
space:
mode:
authorAndrey Andreev <narf@devilix.net>2014-06-02 09:09:56 +0200
committerAndrey Andreev <narf@devilix.net>2014-06-02 09:09:56 +0200
commite1b9665567bbfc28bb13e5e41093901a8da99a0d (patch)
tree961a5238e6ec50a62071bb7e36b3063b5e9d996b /system/libraries/Session/drivers/Session_database_driver.php
parent34b1ef5c13882c4a7827be71e82503ee47d4c271 (diff)
Fix Session_database_driver locking
Ref: #3073
Diffstat (limited to 'system/libraries/Session/drivers/Session_database_driver.php')
-rw-r--r--system/libraries/Session/drivers/Session_database_driver.php16
1 files changed, 9 insertions, 7 deletions
diff --git a/system/libraries/Session/drivers/Session_database_driver.php b/system/libraries/Session/drivers/Session_database_driver.php
index 24847456c..2bdc4d0d5 100644
--- a/system/libraries/Session/drivers/Session_database_driver.php
+++ b/system/libraries/Session/drivers/Session_database_driver.php
@@ -116,15 +116,15 @@ class CI_Session_database_driver extends CI_Session_driver implements SessionHan
$db_driver = $this->_db->dbdriver.(empty($this->_db->subdriver) ? '' : '_'.$this->_db->subdriver);
if (strpos($db_driver, 'mysql') !== FALSE)
{
- $this->_lock_type = 'mysql';
+ $this->_lock_driver = 'mysql';
}
elseif (in_array($db_driver, array('postgre', 'pdo_pgsql'), TRUE))
{
- $this->_lock_type = 'postgre';
+ $this->_lock_driver = 'postgre';
}
elseif (extension_loaded('sysvsem'))
{
- $this->_lock_type = 'semaphore';
+ $this->_lock_driver = 'semaphore';
}
isset($this->_table) OR $this->_table = config_item('sess_table_name');
@@ -248,18 +248,20 @@ class CI_Session_database_driver extends CI_Session_driver implements SessionHan
protected function _get_lock()
{
- $arg = $this->_session_id
- .($this->_match_ip ? '_'.$_SERVER['REMOTE_ADDR'] : '');
-
if ($this->_lock_driver === 'mysql')
{
+ $arg = $this->_session_id
+ .($this->_match_ip ? '_'.$_SERVER['REMOTE_ADDR'] : '');
return (bool) $this->_db
- ->query("SELECT GET_LOCK('".$session_id."', 10) AS ci_session_lock")
+ ->query("SELECT GET_LOCK('".$arg."', 10) AS ci_session_lock")
->row()
->ci_session_lock;
}
elseif ($this->_lock_driver === 'postgre')
{
+ $arg = "hashtext('".$this->_session_id."')"
+ .($this->_match_ip ? ", hashtext('".$_SERVER['REMOTE_ADDR']."')" : '');
+
return (bool) $this->_db->simple_query('SELECT pg_advisory_lock('.$arg.')');
}
elseif ($this->_lock_driver === 'semaphore')