Fix for Tiki #6911 "Database sessions: Session temporarily lost during update (critical race condition in write)"

Index: foncierpedia/lib/tikisession-pdo.php
===================================================================
--- foncierpedia.orig/lib/tikisession-pdo.php
+++ foncierpedia/lib/tikisession-pdo.php
@@ -69,8 +69,11 @@ class Session
 
 		$expiry = time() + ( $prefs['session_lifetime'] * 60 );
 
-		TikiDb::get()->query('delete from sessions where sesskey = ?', array( $sesskey ));
-		TikiDb::get()->query('insert into sessions (sesskey, data, expiry) values( ?, ?, ? )', array( $sesskey, $data, $expiry ));
+		try {
+			TikiDb::get()->query("insert into sessions (sesskey, data, expiry) values( ?, ?, ? )", array( $sesskey, $data, $expiry ), -1, -1, TikiDb::ERR_EXCEPTION);
+		} catch (Exception $e) { // If insertion failed, assume the session is already there and try updating it instead
+			TikiDb::get()->query("update sessions set data=?, expiry=? where sesskey=?", array( $data, $expiry, $sesskey ) );
+		}
 	}
 
     /**
