La mia esperienza di PHP è molto arrugginita, ma nell'esempio che hai fornito, non stai semplicemente creando una variabile di riferimento che punta alla sessione? In altre parole,
$copiedSession = $_SESSION;
non ti dà una "copia" della sessione, ma solo una seconda variabile da cui puoi raggiungerla.
Vuoi una copia profonda.
foreach ($_SESSION as $key => $value)
$copiedSession[$key] = $value
Penso che sia quello che vuoi.
Per prestazioni migliori, sospetto di no. Dipende se $ _SESSION è un array associativo puro o se è una speciale mappa supportata da file che legge / scrive in tempo reale.
A giudicare dall'interfaccia SessionHandler del manuale PHP, i cui metodi di lettura / scrittura prendono un id di sessione e un array di sessione, sospetto che $ _SESSION sia un semplice vecchio array che proviene da SessionHandler :: read e viene passato a SessionHandler :: write .
Tuttavia, per essere assolutamente sicuro, il modo migliore è semplicemente testarlo.
Potresti fare la lettura e la scrittura in un ciclo dire 10.000 volte contro la variabile $ _SESSION direttamente e misurare il tempo di esecuzione minimo, massimo e medio. Quindi fai la stessa cosa contro una copia (usando il codice che ti ho dato sopra, non il codice puntatore di riferimento) e confronta i numeri.