summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordchill42 <dchill42@gmail.com>2012-08-27 03:45:35 +0200
committerdchill42 <dchill42@gmail.com>2012-08-27 03:45:35 +0200
commitaee9265602c3bb30a1f7f3dfd562b9b36cc612a4 (patch)
treeb92c3ba77623848f02a5e9a0656b97e080b19d26
parentb3816b794592873a4e98187e66745544b463e933 (diff)
Fixed select_driver(), cookie sess_destroy(), and native cookie name conflict
-rw-r--r--system/core/Loader.php8
-rwxr-xr-xsystem/libraries/Session/Session.php11
-rwxr-xr-xsystem/libraries/Session/drivers/Session_cookie.php2
-rwxr-xr-xsystem/libraries/Session/drivers/Session_native.php3
4 files changed, 17 insertions, 7 deletions
diff --git a/system/core/Loader.php b/system/core/Loader.php
index a62cf06f5..01d99dd37 100644
--- a/system/core/Loader.php
+++ b/system/core/Loader.php
@@ -911,7 +911,7 @@ class CI_Loader {
$class = substr($class, $last_slash);
// Check for match and driver base class
- if (strtolower($subdir) == strtolower($class) && ! class_exists('CI_Driver_Library'))
+ if (strtolower(trim($subdir, '/')) == strtolower($class) && ! class_exists('CI_Driver_Library'))
{
// We aren't instantiating an object here, just making the base class available
require BASEPATH.'libraries/Driver.php';
@@ -1005,6 +1005,12 @@ class CI_Loader {
$path = strtolower($class).'/'.$class;
return $this->_ci_load_class($path, $params);
}
+ else if (ucfirst($subdir) != $subdir)
+ {
+ // Lowercase subdir failed - retry capitalized
+ $path = ucfirst($subdir).$class;
+ return $this->_ci_load_class($path, $params);
+ }
// If we got this far we were unable to find the requested class.
// We do not issue errors if the load call failed due to a duplicate request
diff --git a/system/libraries/Session/Session.php b/system/libraries/Session/Session.php
index 97eab803f..1f24456a4 100755
--- a/system/libraries/Session/Session.php
+++ b/system/libraries/Session/Session.php
@@ -141,14 +141,17 @@ class CI_Session extends CI_Driver_Library {
$child = str_replace($this->lib_name.'_', '', $driver);
if (isset($this->$child))
{
- // Make driver current and sync userdata
- $this->current = $this->$child;
- $this->userdata =& $this->current->get_userdata();
+ // See if driver is already current
+ if ($this->$child !== $this->current) {
+ // Make driver current and sync userdata
+ $this->current = $this->$child;
+ $this->userdata =& $this->current->get_userdata();
+ }
}
else
{
// Load new driver
- $this->load_driver($driver);
+ $this->load_driver($child);
}
}
}
diff --git a/system/libraries/Session/drivers/Session_cookie.php b/system/libraries/Session/drivers/Session_cookie.php
index 8ac92e432..89e81386f 100755
--- a/system/libraries/Session/drivers/Session_cookie.php
+++ b/system/libraries/Session/drivers/Session_cookie.php
@@ -325,7 +325,7 @@ class CI_Session_cookie extends CI_Session_driver {
public function sess_destroy()
{
// Kill the session DB row
- if ($this->sess_use_database === TRUE && $this->has_userdata('session_id'))
+ if ($this->sess_use_database === TRUE && isset($this->userdata['session_id']))
{
$this->CI->db->where('session_id', $this->userdata['session_id']);
$this->CI->db->delete($this->sess_table_name);
diff --git a/system/libraries/Session/drivers/Session_native.php b/system/libraries/Session/drivers/Session_native.php
index 04c985574..8ba8e749a 100755
--- a/system/libraries/Session/drivers/Session_native.php
+++ b/system/libraries/Session/drivers/Session_native.php
@@ -56,7 +56,8 @@ class CI_Session_native extends CI_Session_driver {
// Set session name, if specified
if ($config['sess_cookie_name'])
{
- $name = $config['sess_cookie_name'];
+ // Differentiate name from cookie driver with '_id' suffix
+ $name = $config['sess_cookie_name'].'_id';
if ($config['cookie_prefix'])
{
// Prepend cookie prefix