2012-09-19 19 views
10

Ho questo codice che settato quando il check login va bene:cookie Disinserimento php

if((isset($_POST["remember_me"]))&&($_POST["remember_me"]==1)) 
    { 
    setcookie('email', $username, time()+3600); 
    setcookie('pass', $pass, time()+3600); 
    } 

Ora, quando clicco sul link di logout (logout.php) ho fatto questo:

<?php session_start(); 
setcookie("email", '', 1, ""); 
setcookie("pass", '', 1, ""); 
$_SESSION["login"] = ""; 
header("location: aforum/enter_furom.php"); 
?> 

Non ho usato la sessione di distruzione perché non voglio distruggere tutte le sessioni .... distruggere una sessione sta funzionando bene ... ma quando provo a disabilitare i cookie, i browser (tutti i browser: explorer, chrome, firefox, mozilla) dammi un errore dicendo che il nuovo co okies non può essere impostato ... qualsiasi aiuto per disinserire i cookie di cui sopra?

+0

Ci siamo quasi, ma non ha in realtà detto cosa _actually happens_ alla su browser vengono mantenuti i cookie? Modificato in qualche modo? – glenatron

+0

ho modificato il mio interlocutore;) – michael

+0

Potresti trovare ['$ cookie-> delete()'] (https://github.com/delight-im/PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php# L173) utile, come trovato in [questa libreria autonoma] (https://github.com/delight-im/PHP-Cookie). – caw

risposta

11

utilizzare il superglobale _COOKIE variabile:

unset($_COOKIE['mycookiename']); 

o chiamare setcookie() con solo i cookie citarne

setcookie('mycookiename'); 

Per azzerare i cookie in uso Esci:

setcookie('pass'); 
setcookie('email'); 

Per te controllo login:

if(
    isset($_POST["remember_me"]) && 
    $_POST["remember_me"]==1 && 
    $_COOKIE['pass'] != NULL && 
    $_COOKIE['email'] != NULL && 
) 
+0

ancora non funziona ... il nuovo errore mi dà: il reindirizzamento (posizione dell'intestazione ...) è stato fatto molto spesso ... così o per eliminare i cookie dal mio pc o un problema del server ... ma quando rimuovo cookies dal pc ... funziona di nuovo ... e quando si chiude ... lo stesso problema ...: \ – michael

+0

sei sicuro che il cookie non sia resettato dopo che è stato cancellato e il client inoltrato tramite header()? –

+0

sì amico il suo set ... sapevo qual è il mio problema ... il mio problema ... quello nel mio controllo, .... 'if ((isset ($ _ COOKIE [" email "])) && (isset ($ _ COOKIE ["pass"]))) { $ _SESSION ["login"] = 1; } ' .. ora come posso fare questo controllo non solo se e-mail di posta elettronica ... ma solo e-mail per esempio! = 1? – michael

1

Per disinserire i cookie in PHP, è sufficiente impostare il loro tempo di scadenza in un momento nel passato. Per esempio:

$expire = time() - 300; 
setcookie("email", '', $expire); 
setcookie("pass", '', $expire); 
5
setcookie('cookiename', '', time()-3600); 
0

È necessario impostare il tempo di scadenza per il passato, per esempio

setcookie('email', '', time()-3600); 

Inoltre si dovrebbe utilizzare un Absolute URI per il vostro header('Location:' ....).

2

Controlla nel tuo browser la directory in cui opera il cookie. E disinserirlo specificando il percorso del cookie. Come nell'esempio se la directory cookie è /aforum/

setcookie ("email","",time()-1,"/aforum/","http:// yourdomain.com"); 
+0

il manuale suggerisce 'time() - 3600' ma -1 o -9999 sono anche pazzi. perché la gente usa una chiamata a tempo()? perché non basta digitare l'equivalente temporale del 1 ° gennaio 1970? – gcb

1

In Chrome e IE8 +, almeno, il seguente rimuoverà il cookie dal browser. Non si rifletterà nell'array $_COOKIE fino a quando la pagina non verrà ricaricata.

setcookie('cookiename','',0,'/',$cookieDomain)

si può essere in grado di lasciare fuori alcuni parametri qui, ma la cosa importante è che si sta impostando una stringa vuota, e che rimuove il cookie dal browser.

0

provare questo

setcookie ("email", "", time() - 3600); 
    setcookie ("pass", "", time() - 3600);