diff --git a/lib/SimpleSAML/Session.php b/lib/SimpleSAML/Session.php index 9f4a623198c30e553b9b54116421f8b74af9843f..4f6508523d4f0bb9965c3bb0d180cb87379b127a 100644 --- a/lib/SimpleSAML/Session.php +++ b/lib/SimpleSAML/Session.php @@ -956,6 +956,15 @@ class SimpleSAML_Session { return $ret; } + /** + * Create a new session and cache it. + * + * @param string $sessionId The new session we should create. + */ + public static function createSession($sessionId) { + assert('is_string($sessionId)'); + self::$sessions[$sessionId] = NULL; + } /** * Load a session from the session handler. @@ -975,7 +984,7 @@ class SimpleSAML_Session { $checkToken = FALSE; } - if (isset(self::$sessions[$sessionId])) { + if (array_key_exists($sessionId, self::$sessions)) { return self::$sessions[$sessionId]; } diff --git a/lib/SimpleSAML/SessionHandlerCookie.php b/lib/SimpleSAML/SessionHandlerCookie.php index 0156a311a283350c2b3bd52786512fa80e8711ee..9d6d8461899a9d4a87432310e248da33a8f1a2dc 100644 --- a/lib/SimpleSAML/SessionHandlerCookie.php +++ b/lib/SimpleSAML/SessionHandlerCookie.php @@ -55,6 +55,7 @@ extends SimpleSAML_SessionHandler { if(!self::isValidSessionID($this->session_id)) { /* We don't have a valid session. Create a new session id. */ $this->session_id = self::createSessionID(); + SimpleSAML_Session::createSession($this->session_id); $this->setCookie($this->cookie_name, $this->session_id); } } diff --git a/lib/SimpleSAML/SessionHandlerPHP.php b/lib/SimpleSAML/SessionHandlerPHP.php index 02188aecadf7efd93fb3784e43fb9db800a21ec6..1d07f37071dc53cad0f886d75e222abbbe9471d6 100644 --- a/lib/SimpleSAML/SessionHandlerPHP.php +++ b/lib/SimpleSAML/SessionHandlerPHP.php @@ -73,7 +73,9 @@ class SimpleSAML_SessionHandlerPHP extends SimpleSAML_SessionHandler { } /* Session cookie unset - session id not set. Generate new (secure) session id. */ - session_id(SimpleSAML_Utilities::stringToHex(SimpleSAML_Utilities::generateRandomBytes(16))); + $sessionId = SimpleSAML_Utilities::stringToHex(SimpleSAML_Utilities::generateRandomBytes(16)); + SimpleSAML_Session::createSession($sessionId); + session_id($sessionId); } session_start();