diff --git a/lib/SimpleSAML/SessionHandlerPHP.php b/lib/SimpleSAML/SessionHandlerPHP.php
index b95bdcb22bb2b0d9f2bfee28c8b0b6b2155cbcca..5b6ef5619607559cbab935cdb9c4fc2d0a0719a2 100644
--- a/lib/SimpleSAML/SessionHandlerPHP.php
+++ b/lib/SimpleSAML/SessionHandlerPHP.php
@@ -72,7 +72,12 @@ class SimpleSAML_SessionHandlerPHP extends SimpleSAML_SessionHandler {
 		/* Generate new (secure) session id. */
 		$sessionId = SimpleSAML_Utilities::stringToHex(SimpleSAML_Utilities::generateRandomBytes(16));
 		SimpleSAML_Session::createSession($sessionId);
-		session_id($sessionId);
+
+		if (session_id($sessionId) !== '') {
+			/* Session already started, close it. */
+			session_write_close();
+			session_id($sessionId);
+		}
 
 		session_start();