diff --git a/lib/SimpleSAML/Database.php b/lib/SimpleSAML/Database.php index 16df90f5daee5c770c4e9081ec84a5f011f1e521..f9796ad6be0ffeb0091af427110d6394e39fbc98 100644 --- a/lib/SimpleSAML/Database.php +++ b/lib/SimpleSAML/Database.php @@ -48,7 +48,7 @@ class SimpleSAML_Database { */ public static function getInstance($altConfig = null) { $config = ($altConfig)? $altConfig : SimpleSAML_Configuration::getInstance(); - $instanceId = spl_object_hash($config); + $instanceId = self::generateInstanceId($config); /* Check if we already have initialized the session. */ if (isset(self::$instance[$instanceId])) { @@ -85,6 +85,28 @@ class SimpleSAML_Database { $this->tablePrefix = $config->getString('database.prefix', ''); } + /** + * Generate an Instance ID based on the database + * configuration. + * + * @param $config Configuration class + * + * @return string $instanceId + */ + private static function generateInstanceId($config){ + $assembledConfig = array( + 'master' => array( + 'database.dsn' => $config->getValue('database.dsn'), + 'database.username' => $config->getValue('database.username'), + 'database.password' => $config->getValue('database.password'), + 'database.persistent' => $config->getValue('database.persistent'), + ), + 'slaves' => $config->getValue('database.slaves'), + ); + + return sha1(serialize($assembledConfig)); + } + /** * This function connects to a dabase. *