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();