2012-06-22 18 views
9

Qual è il modo migliore per mantenere l'utente connesso a un sito alimentato da PHP fino a quando non chiude il browser?sessione o cookie PHP

Il primo e il modo più popolare è quello di andare con $_SESSION. Il secondo è passare zero come il terzo argomento della funzione setcookie: setcookie(name, value, 0, domain);

+5

sessione in realtà usa cookie per memorizzare il SID –

+1

@AlvinWong lo so, ma la mia domanda è che cosa è meglio usare in PHP – treng

risposta

18

Come sessione PHP memorizza in realtà il SID dal biscotto (ovviamente è possibile utilizzare altri modi per impostare il SID se vi piace), non ci sarebbe molta differenza quando semplicemente utilizzando.

La principale differenza è la sicurezza, perché se si utilizzano i cookie direttamente i client possono vederli e/o modificarli autonomamente, ma per la sessione i dati vengono archiviati sul lato server in modo che il client non possa accedere direttamente.

Quindi, se i dati durano solo per quella sessione, preferisco usare la sessione.

Side-note: se si utilizzano più server per bilanciare il carico, si deve prestare molta attenzione poiché i dati di sessione sono memorizzati localmente sul server per impostazione predefinita. È possibile condividere i dati di sessione su più server, ma questo è beyond the scope of this question. In alternativa, è possibile memorizzare i dati in un database.

+2

puoi ancora utilizzare le sessioni in un server multiplo. memorizzando la sessione in memcache (http://php.net/manual/en/memcached.sessions.php) – Rizon

3

Una sessione è destinata a questo scopo, quindi vorrei andare con quello.

3

"Le sessioni non dipendono dall'utente che consente un cookie. Funzionano invece come un token che consente l'accesso e il passaggio di informazioni mentre l'utente ha il browser aperto. Il problema con le sessioni è che quando chiudi il browser perdi anche il Quindi, se tu avessi un sito che richiede un accesso, questo non potrebbe essere salvato come una sessione come potrebbe fare come un cookie, e l'utente sarebbe costretto a riconnettersi ogni volta che visita.

Puoi ovviamente ottieni il meglio di entrambi i mondi! Una volta che sai cosa fa ciascuno, puoi utilizzare una combinazione di cookie e sessioni per far funzionare il tuo sito esattamente come desideri. "

http://php.about.com/od/learnphp/qt/session_cookie.htm

1

Vorrei usare $ _SESSION come più semplice. : P In ogni caso, come sopra menzionato, decidi il tuo caso ... se devi mantenere l'utente loggato per un po 'anche dopo che il browser è stato chiuso usa cookie ma correttamente. Può essere una minaccia per la sicurezza per te! altro uso sessione.

4

Ti suggerisco di andare per le sessioni di PHP. È semplice e non devi gestire i cookie da solo.

Il seguente è il codice per distruggere veramente una sessione, copiata da example fornita nel manuale PHP.

// Initialize the session. 
// If you are using session_name("something"), don't forget it now! 
session_start(); 

// Unset all of the session variables. 
$_SESSION = array(); 

// If it's desired to kill the session, also delete the session cookie. 
// Note: This will destroy the session, and not just the session data! 
if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', time() - 42000, 
     $params["path"], $params["domain"], 
     $params["secure"], $params["httponly"] 
    ); 
} 

// Finally, destroy the session. 
session_destroy(); 

Circa la tua domanda:

Cosa c'è di meglio di utilizzare per mantenere utente registrato fino a che non chiude il browser?

Non esiste un metodo a prova di errore per determinare quando l'utente ha chiuso il browser. Un approccio consiste nel continuare a inviare piccole richieste AJAX al server. Quando non vengono visualizzate richieste per un lungo periodo di tempo, distruggi la sessione.

Un altro approccio è quello di ascoltare per DOM Window scaricare e inviare una richiesta al server per distruggere la sessione.

3

Si dovrebbe usare $ _SESSION

Perché se i cookie sono abilitati, poi un cookie viene utilizzato comunque per l'identificatore di sessione PHP. Quindi scrivere un altro cookie non è ottimale.

L'unico motivo per cui si desidera utilizzare un cookie anziché la sessione è se si desidera eseguire il bilanciamento del carico. Quindi se hai 2 server e uno di loro fallisce, la sessione su quel server andrà persa. Ora l'utente che ha effettuato il login (che ha avuto una sessione sul server 1) verrà invitato ad accedere di nuovo. Ma se invece avesse un cookie, non gli sarebbe stato chiesto di effettuare nuovamente il login.

2

cookie viene limitato per ogni dominio è possibile impostare 20 cookie e la dimensione massima di ogni è 4KB