2014-07-25 2 views
9

Voglio poter passare da una sessione all'altra in php. Qui è il mio codice corrente:PHP Come posso creare più sessioni?

<?php 

session_name("session1"); 
session_start(); 
$_SESSION["name"] = "1"; 
echo "<pre>", print_r($_SESSION, 1), "</pre>"; 
session_write_close(); 

session_name("session2"); 
session_start(); 
$_SESSION["name"] = "2"; 
echo "<pre>", print_r($_SESSION, 1), "</pre>"; 
session_write_close(); 

session_name("session1"); 
session_start(); 
echo "<pre>", print_r($_SESSION, 1), "</pre>"; 

voglio che l'uscita

Array 
(
    [name] => 1 
) 
Array 
(
    [name] => 2 
) 
Array 
(
    [name] => 1 
) 

ma è l'output

Array 
(
    [name] => 1 
) 
Array 
(
    [name] => 2 
) 
Array 
(
    [name] => 2 
) 

E 'possibile passare da una sessione del genere? Non ho bisogno di due sessioni in esecuzione allo stesso tempo, ma devo essere in grado di passare da una all'altra. Quando eseguo questo codice, ottengo due cookie: session1 e session2 con lo stesso valore.

Grazie per qualsiasi aiuto!

+1

Potrebbe aiutare: http://stackoverflow.com/questions/7551404/php-what-is-the-purpose-of-session-name –

+0

Grazie, ho già visto che . Questo è esattamente ciò di cui ho bisogno, ma per qualche motivo non funziona. – Nathan

+1

Il tuo titolo dice che "non funziona" quando in realtà non sta facendo ciò che pensi che dovrebbe fare. Perché non fare la domanda appropriata, * Come posso fare x? Questo è quello che ho provato. * –

risposta

15

Quello che è necessario utilizzare è session_id() invece di session_name()

<?php 

session_id("session1"); 
session_start(); 
echo session_id(); 
$_SESSION["name"] = "1"; 
echo "<pre>", print_r($_SESSION, 1), "</pre>"; 
session_write_close(); 

session_id("session2"); 
echo session_id(); 
session_start(); 
$_SESSION["name"] = "2"; 
echo "<pre>", print_r($_SESSION, 1), "</pre>"; 
session_write_close(); 

session_id("session1"); 
echo session_id(); 
session_start(); 
echo "<pre>", print_r($_SESSION, 1), "</pre>"; 
session_write_close(); 

session_id("session2"); 
echo session_id(); 
session_start(); 
echo "<pre>", print_r($_SESSION, 1), "</pre>"; 

Questo stamperà:

session1 

Array 
(
    [name] => 1 
) 

session2 

Array 
(
    [name] => 2 
) 

session1 

Array 
(
    [name] => 1 
) 

session2 

Array 
(
    [name] => 2 
) 

session_id è un identificatore per una sessione, che aiuta a distinguere le sessioni. session_name è solo un alias denominato per la sessione corrente

+3

Se si utilizza questa tecnica, diversi utenti con lo stesso ID sessione condivideranno le loro variabili di sessione. Gli ID di sessione dovrebbero essere unici e difficili da indovinare. – Barmar

+1

L'idea è che a diversi utenti non debba essere fornito lo stesso ID di sessione. Naturalmente non sarà una semplice stringa come session1, sesson2 invece sarebbe un uuid unico per quell'utente o sessione. – raidenace

+1

Questa soluzione implica enormi rischi per la sicurezza se non viene implementata correttamente. – nebulousGirl