2013-06-13 12 views
5

voglio usare cookie nella pagina web e voglio usarlo per salvare eventuali variabili opzionali. ma dopo l'uso setcookie e la pagina di aggiornamento isset() non possono rilevare, devo essere molte pagine di aggiornamento per usarlo,Set di cookie PHP nella seconda pagina di aggiornamento

non posso usarlo nel primo aggiornamento o visitare la pagina.

PHP:

setcookie("user", "Alex Porter", time()+3600); 
if (isset($_COOKIE["user"])) 
    echo "Welcome " . $_COOKIE["user"] . "!<br>"; 
else 
    echo "Welcome guest!<br>"; 

//unset($_COOKIE['user']); 
//setcookie('user', '', time() - 3600); 

RISULTATO:

dopo salvare e aggiornare la pagina

Welcome guest! 

seconda di aggiornamento:

Welcome Alex Porter 
+5

Ecco come funziona. Il cookie viene impostato sulla risposta e inviato con la successiva richiesta – mplungjan

+0

possibile duplicato di [cookie di lettura PHP creati con setcookie()] (http://stackoverflow.com/questions/4148126/php-read-cookies-created-with -setcookie) – mplungjan

risposta

6

Quando si imposta un cookie, viene inviato al browser. La volta successiva che il browser invia una richiesta per una pagina, restituisce le informazioni sui cookie e la pagina può farne uso.

  1. Pagina visite del browser (accesso o qualcosa di simile) e non invia dati sui cookie.
  2. Il server imposta cookie (che significa includerli nell'intestazione della risposta HTTP).
  3. Browser visita la pagina e invia i dati dei cookie.
  4. Il server può visualizzare i dati dei cookie e utilizzarli.

Per risolvere il problema, reindirizzare l'utente alla pagina in cui si desidera visualizzare i dati dopo aver impostato il cookie, invece di visualizzare semplicemente la pagina. In questo modo puoi utilizzare i dati dei cookie.

+0

Sto reindirizzando sulla stessa pagina con alcuni get variabile ma ottengo l'errore di header già inviato. – Vikram

+0

L'errore "L'intestazione è già stata inviata" è dato dal fatto che si produce qualcosa prima di cambiare le intestazioni (i cookie fanno parte delle intestazioni). È necessario impostare il cookie prima di restituire qualsiasi output da PHP. –

0

Credo che si desidera qualcosa di simile:

if (isset($_COOKIE["user"])) 
    echo "Welcome " . $_COOKIE["user"] . "!<br>"; 
else { 
    echo "Welcome guest!<br>"; 
    setcookie("user", "Alex Porter", time()+3600); 
} 
0

Cookie è impostata su un percorso specifico e di dominio. Si dovrebbe cambiare setcookie() per

setcookie ("user", "Alex Porter", time()+3600, "/", "youdomain.com"); 

Su '/', il cookie sarà disponibile entro l'intero dominio (youdomain.com).

Il cookie sarà visibile dopo l'aggiornamento della pagina.

Il codice può essere simplifed così:

echo "Welcome " . isset($_COOKIE["user"]) ? $_COOKIE["user"] : "guest" . "!<br>"; 
+0

Com'è collegato alla domanda? – Leri

+0

dice che il cookie non è visibile potrebbe essere il problema con l'impostazione del percorso corretto del cookie. – Robert

+0

Rileggere domanda, per favore. OP dice che il cookie non è disponibile al primo utilizzo (ad esempio quando questo codice viene eseguito per primo). – Leri

0

I dati $_COOKIE vengono letti dai dati di richiesta del client e non vengono scritti immediatamente da setCookie(). Questo è un comportamento normale e dovrebbe essere incorporato nel flusso del programma.

Se si desidera che i dati dei cookie di essere immediatamente disponibili nel tuo caso, si potrebbe provare qualcosa di simile:

if (isset($_COOKIE["user"])) 
    echo "Welcome " . $_COOKIE["user"] . "!<br>"; 
else { 
    $user = "Alex Porter"; 
    setcookie("user", $user, time()+3600); 
    echo "Welcome $user!<br>"; 
} 
2

Beh, non c'è nulla di sbagliato in questo. La prima volta che si aggiorna, si esegue effettivamente lo script per impostare il cookie. Quindi, esegue la dichiarazione else.

Quando si aggiorna la seconda volta, la funzione isset() restituisce true e l'istruzione if viene eseguita.

Ecco una descrizione pittorica:

enter image description here

Tuttavia, v'è un problema con lo script. L'aggiornamento della pagina ogni volta aggiorna il tempo dei cookie su 3600 seconds. Quindi, è necessario impostare il cookie solo quando non ci sono cookie impostati nel browser dell'utente in questo modo:

if (isset($_COOKIE["user"])) 
    echo "Welcome " . $_COOKIE["user"] . "!<br>"; 
else 
{ 
    echo "Welcome guest!<br>"; 
    setcookie("user", "Alex Porter", time()+3600); 
} 
Problemi correlati