2012-05-10 7 views
15

Ho bisogno di capire come rimuovere questo cookie. Tutto ciò che ho provato finora ha fallito.come annullare i cookie in PHP?

Questo è il modo in cui attualmente lo disinserisco e non sembra funzionare.

setcookie("user_id", $user_id, time() - 7200); 

Ecco come ho impostato:

setcookie("user_id", $user_id, time() + 7200); 

Ho questa funzione chiamata set_session_from_cookie() che controlla se un cookie è impostato, e se è impostato, si avvia una nuova sessione utilizzando il cookie.

Il problema è che quando uso questo sulla mia pagina non riesco a disconnettermi. Presumo questo perché non riesco a disinserire la sessione.

Il motivo per cui ho questa funzione è che se un utente desidera essere ricordato dopo aver terminato la sessione, può riavviare la sessione chiamando il cookie.

function set_session_from_cookie() 
{ 
    if (isset($_SESSION['user_id'])) { 
     echo ''; 
    } else { 
     $_SESSION['user_id']=$_COOKIE['user_id']; 
    } 
} 

Esci:

<?php 
require'core.php'; 
session_destroy(); 

setcookie("user_id", "", time() - 7200); 
header('Location:/social_learning/site_pages/starter-template.php'); 

ho impostato la mia cookie con il seguente codice:

if ($rememberme == "on") { 
    $user_id = mysql_result($query_run, 0, 'id'); 
    setcookie("user_id", $user_id, time() + 7200); 
    $_SESSION['user_id'] = $user_id; 
    redirect('home_page.php'); 
} else { 
    if ($rememberme == "") { 
     echo 'ok'; 
     $user_id = mysql_result($query_run, 0, 'id'); 
     echo $user_id; 
     $_SESSION['user_id'] = $user_id; 
     redirect('home_page.php'); 
    } 
} 

Come posso riavviare la sessione utilizzando il cookie salvato senza utilizzare la funzione che ho creato? Poiché sembra che la funzione stia causando l'impossibilità di effettuare il logout.

+0

È il vostro biscotto doveva essere a livello di sito? –

+0

dovrebbe essere? come posso dire? – arboles

+4

Non utilizzare i tempi relativi per disabilitare i cookie. Ciò rende il disinserimento dipendente dal fatto che l'orologio dell'utente sia accurato. Usa un tempo di '1', che catturerà tutti tranne quelli con orologi veramente guasti che pensano che sia il 1970. –

risposta

9

La soluzione a questo problema era che l'avevo bisogno di impostare il percorso corretto per disinserire il biscotto dal momento che l'ho disattivato da un file diverso in cui l'ho originariamente impostato.

Ho trovato il percorso che dovevo utilizzare per l'annullamento cercando il cookie nei cookie del mio browser e una volta trovato il cookie all'interno del mio browser, il percorso è stato elencato vicino al cookie. Quindi ho quindi impostato il percorso del cookie in questo modo:

setcookie("user_id", $user_id, time() - 1, "/social_learning/site_pages"); 

L'ultimo parametro è il percorso. E ha funzionato.

mio originale setcookie assomiglia a questo:

setcookie("user_id", $user_id, time() + 7200, ""); 
24

Impostare la data di scadenza del cookie su un'ora (ad esempio un secondo dopo epoch, ad esempio).

setcookie("yourCookie", "yourValue", 1);

Questo farà sì che il cookie di scadenza.

1 viene utilizzato al posto di 0, perché 0 imposta il cookie alla scadenza alla fine della sessione.

+0

è 1 considerato un tempo nel passato? – arboles

+1

@arboles L'ora è data sotto forma di un timestamp UNIX, quindi sì, 1 era molto tempo fa :) –

+13

1 è "1 gennaio, 19:70 00:00:01 AM" –

3

un'occhiata al manuale di PHP per informazioni su setcookie

http://php.net/manual/en/function.setcookie.php

Queste note dovrebbero spiegare il processo:

bool setcookie (string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]]) 

cookies devono essere eliminati con gli stessi parametri sono stati impostati con. Se l'argomento value è una stringa vuota o FALSE e tutti gli altri argomenti corrispondono a una chiamata precedente a setcookie, il cookie con il nome specificato verrà eliminato dal client remoto. Questo valore viene raggiunto internamente impostando il valore su "cancellato" e la data di scadenza fino a un anno.

Perché l'impostazione di un cookie con valore FALSE tenterà di eliminare il cookie , non utilizzare valori booleani. Utilizzare invece 0 per FALSE e 1 per TRUE.

+0

sto facendo questo, usando gli stessi parametri da cancellare, come sono da impostare. e non sta funzionando. – arboles

6

ci sono alcuni problemi di sicurezza per quanto riguarda il vostro codice, ma per rispondere alla tua domanda, di disinserire un cookie in PHP, tutto quello che dovete fare è impostare il tempo di scadenza ad un momento del passato:

setcookie("user_id", "", time()-10, "/"); 

"loginform.php" non è un dominio valido, questo potrebbe essere il problema qui.

+0

come posso impostare il dominio sul mio host locale? – arboles

+0

basta inserire una barra come quella che avevo nell'esempio "/", questo è ciò, questo significa che questo cookie è disponibile per tutto il tuo dominio. –

1

Nel manuale di PHP, è possibile eliminare un cookie impostando una data di scadenza è nel passato:

setcookie("key","",time()-3600); 

In alcuni casi, è necessario fornire il percorso e dominio per argomenti.

In realtà, se si assegna un cookie con una stringa vuota, sarà anche essere disinserito:

setcookie("key",""); 
+0

lo so, attualmente sto facendo questo metodo, e non funziona. – arboles

+0

Forse potresti dover specificare manualmente percorso e dominio. –

4

uso di questo codice

setcookie("CookieName", "", time()-(60*60*24), "/"); 

funziona ogni volta per me in ogni sito web