2010-09-10 21 views
13

Qualcuno potrebbe dire come mantenere una sessione (in PHP) in modo che la sessione contenga sia conservata e accessibile anche dopo il riavvio del browser.È possibile mantenere la sessione anche dopo la chiusura del browser?

In generale una sessione scade con la chiusura di un browser, ma voglio che la sessione NON sia CHIUSO in modo che i dati della sessione siano accessibili al prossimo utilizzo del browser.

+0

Che smette di essere dati di sessione e inizia a essere mo re dati persistenti (come in un DB) sicuramente? – Lloyd

+0

Come si registra la sessione - con un cookie? Dovrai fare in modo che i cookie rimangano al di là della sessione del browser, quindi scusami, non posso dirti che cosa devi fare in modo specifico per PHP. Se stai utilizzando sessioni senza cookie aggiungendo gli ID ai tuoi URL, non sono sicuro che tu possa farlo, a meno che tu non possa forzare l'utente a tornare allo stesso URL. Le sessioni – Rup

risposta

-1

Questo può essere fatto se si utilizzano i cookie al posto delle sessioni.

+1

utilizzano i cookie, quindi ... –

+0

Beh, volevo usare setcookie invece di session_start – Mischa

+0

Le sessioni @remi possono funzionare anche senza cookie. –

5

sessione in PHP (e nella maggior parte delle tecnologie web) funziona così:

di memorizzare un ID di sessione in un cookie sul computer client.

Quando il cliente arriva sul tuo sito ti invia l'id di sessione.

Il server trova i dati di sessione in un file con l'id di sessione e lo carica.

Quindi chiudere il browser non ha effetto sulla sessione, ma se il browser svuota il cookie quando lo chiudi (non credo che nessun browser faccia una cosa del genere).

Se si è sicuri che l'utente sia sempre connesso, è possibile memorizzarlo nei propri cookie, ma non è sicuro.

+0

Oppure puoi memorizzare un token crittografico nei cookie. –

+0

Perché non è sicuro? È assolutamente sicuro se si utilizzano i cookie in modo sicuro e intelligente. –

+0

@hey: non è sicuro: vado sul tuo computer, vado nella directory dei cookie e leggo i tuoi dati di accesso, e sono sicuro al 99% che tu usi queste informazioni in altri siti web. Se è un computer pubblico è ancora più divertente. @ignacio: in effetti puoi creare il tuo sistema di sessione. –

8

È un ossimoro.
Sessione sta per "finché il browser non è chiuso".
La sessione è una scadenza .
Se non vuoi che sia scaduto, probabilmente non vuoi affatto una sessione.

Probabilmente stai messing sessione con cookie o database.

+8

Le sessioni funzionano con i cookie, che vengono cancellate quando il browser è chiuso, _unless_ hanno uno specifico tutta la vita. – jwueller

+0

@elusive 1. il cookie non è l'unica cosa responsabile per la durata della sessione. 2. Sto parlando del termine "sessione", non del meccanismo PHP specifico. ma l'ideologia della sessione PHP ovviamente segue questa definizione. Puoi ignorare questo comportamento, ma ti rovinerai. –

+1

I cookie vengono chiamati * cookie di sessione * se scadono quando scade la sessione del browser. E questo è il caso quando il browser è chiuso. Ma tale cookie di sessione non ha bisogno di contenere un ID di sessione. – Gumbo

0

Si può fare qualcosa di simile: (vedi session_set_cookie_parameters() e session_name())

// long long time 
$sessionTime = 365 * 24 * 60 * 60; 
$sessionName = "my_session"; 
session_set_cookie_params($sessionTime); 
session_name($sessionName); 
session_start(); 

if (isset($_COOKIE[$sessionName])) { 
    setcookie($sessionName, $_COOKIE[$sessionName], time() + $sessionTime, "/"); 
} 

Per $sessionTime, vedere anche this question

2

Il più semplice e migliore che ho trovato è che invece di appena session_start dovremmo inserisci questo in ogni pagina c'è una sessione

$expire = 365*24*3600; // We choose a one year duration 

ini_set('session.gc_maxlifetime', $expire); 

session_start(); //We start the session 

setcookie(session_name(),session_id(),time()+$expire); 
//Set a session cookies to the one year duration 
Problemi correlati