Risposte:
Puoi provare questo
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['remember_user']);
setcookie('remember_user', null, -1, '/');
return true;
} else {
return false;
}
unset($_COOKIE['Hello']);
. Non cambia nulla se lo rimuovi.
unset($_COOKIE['Hello']);
è in realtà importante se è possibile controllare il cookie da qualche parte nel codice.
Impostare il valore su "" e la data di scadenza su ieri (o qualsiasi data nel passato)
setcookie("hello", "", time()-3600);
Quindi il cookie scadrà al successivo caricamento della pagina.
Un modo chiaro per eliminare un cookie è quello di cancellare sia il $_COOKIE
valore sia il file cookie del browser:
if (isset($_COOKIE['key'])) {
unset($_COOKIE['key']);
setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
setcookie
chiamata:setcookie('key', '', time() - 3600, '/');
unsetting
con successo.
null
valori, dovrai invece utilizzare array_key_exists () , poiché un controllo con un null
valore non verrà trovato da un isset()
controllo.
Per eliminare in modo affidabile un cookie non è sufficiente impostarlo in modo che scada in qualsiasi momento nel passato, come calcolato dal tuo server PHP. Questo perché i computer client possono e spesso hanno tempi diversi da quelli del tuo server.
La migliore pratica è quella di sovrascrivere il cookie corrente con un cookie vuoto che scade un secondo in futuro dopo l'epoca (1 gennaio 1970 00:00:00 UTC), in questo modo:
setcookie("hello", "", 1);
Ciò disinserirà il cookie nel codice, ma poiché la variabile $ _COOKIE viene aggiornata su ogni richiesta, tornerà alla richiesta della pagina successiva.
Per eliminare effettivamente il cookie, imposta la data di scadenza in passato:
// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
unset()
del cookie?
Ho avuto lo stesso problema nel mio codice e ho scoperto che si trattava di un problema relativo al percorso dei cookie. Dai un'occhiata a questo post di overflow dello stack: Impossibile eliminare il cookie di php set
Avevo impostato il cookie utilizzando un valore di percorso "/", ma non avevo alcun valore di percorso quando ho provato a cancellarlo, quindi non è stato cancellato. Quindi, ecco un esempio di ciò che ha funzionato:
Impostazione del cookie:
$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Cancellazione del cookie:
setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);
Spero che aiuti.
Se imposti la scadenza del cookie in passato, il browser lo rimuoverà. Vedi setcookie () elimina l'esempio su php.net
Vedi l'esempio " Esempio # 2 setcookie () elimina esempio " dai documenti PHP. Per cancellare un cookie dal browser, devi dire al browser che il cookie è scaduto ... il browser lo rimuoverà. unset
come hai usato rimuove semplicemente il cookie "ciao" dall'array COOKIE.
Ecco come funziona il codice setcookie () di PHP v7 quando si esegue:
<?php
setcookie('user_id','');
setcookie('session','');
?>
Dall'output di tcpdump durante lo sniffing sulla porta 80, il server invia al client (Browser) le seguenti intestazioni HTTP:
Set-Cookie: user_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Set-Cookie: session=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Osservando i pacchetti nelle seguenti richieste, il Browser non invia più questi cookie nelle intestazioni
Per eliminare i cookie è sufficiente impostare il valore su NULL:
"Se hai impostato un cookie con valori non predefiniti per un tempo di scadenza, percorso o dominio, devi fornire nuovamente gli stessi valori quando elimini il cookie affinché il cookie venga eliminato correttamente." Citazione dal libro "Learning PHP5".
Quindi questo codice dovrebbe funzionare (funziona per me):
Impostazione del cookie:
setcookie('foo', 'bar', time() + 60 * 5);
Eliminazione del cookie:
setcookie('foo', '', time() + 60 * 5);
Ma ho notato che tutti stanno impostando la data di scadenza al passato, è necessario e perché?
''
non è la stessa cosa di null
.
Per rimuovere tutti i cookie è possibile scrivere:
foreach ($_COOKIE as $key => $value) {
unset($value);
setcookie($key, '', time() - 3600);
}
Basta impostare la data di scadenza a un'ora fa, se si desidera "rimuovere" il cookie, in questo modo:
setcookie ("TestCookie", "", time() - 3600);
o
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
Fonte: http://www.php.net/manual/en/function.setcookie.php
Dovresti usare la filter_input()
funzione per tutti i globi che un visitatore può inserire / manipolare, in questo modo:
$visitors_ip = filter_input(INPUT_COOKIE, 'id');
Puoi leggere di più qui: http://www.php.net/manual/en/function.filter-input.php e qui: http://www.w3schools.com/php/func_filter_input.asp
So che è passato molto tempo da quando questo argomento è stato creato, ma ho visto un piccolo errore all'interno di questa soluzione (posso chiamarlo così, perché è un dettaglio). Sono d'accordo che la soluzione migliore è probabilmente questa soluzione:
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
return true;
} else {
return false;
}
Ma, nel caso presente, si eliminano i cookie in tutti i casi in cui la funzione unset funziona e si creano immediatamente nuovi cookie scaduti nel caso in cui la funzione unset non funzioni.
Ciò significa che anche se la funzione unset funziona, avrà comunque 2 cookie sul computer. L'obiettivo richiesto, dal punto di vista logico, è quello di eliminare i cookie se è possibile e, in caso contrario, farli scadere; per ottenere il risultato "più pulito".
Quindi, penso che dovremmo fare meglio:
if (isset($_COOKIE['remember_user'])) {
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
return true;
} else {
return false;
}
Grazie e buona giornata :)
$cookie_name = "my cookie";
$cookie_value = "my value";
$cookie_new_value = "my new value";
// Create a cookie,
setcookie($cookie_name, $cookie_value , time() + (86400 * 30), "/"); //86400 = 24 hours in seconds
// Get value in a cookie,
$cookie_value = $_COOKIE[$cookie_name];
// Update a cookie,
setcookie($cookie_name, $cookie_new_value , time() + (86400 * 30), "/");
// Delete a cookie,
setcookie($cookie_name, '' , time() - 3600, "/"); // time() - 3600 means, set the cookie expiration date to the past hour.
Se vuoi eliminare completamente il cookie da tutto il tuo dominio attuale, il seguente codice ti aiuterà sicuramente.
unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");
Questo codice eliminerà completamente la variabile cookie da tutto il tuo dominio; "/" - indica che il valore della variabile cookie è impostato per tutto il dominio non solo per il dominio o il percorso corrente. time () - 300 indica che è impostato su una volta precedente, quindi scadrà.
Ecco come è perfettamente cancellato.
È possibile impostare una variabile di sessione in base ai valori dei cookie
session_start();
if(isset($_COOKIE['loggedin']) && ($_COOKIE['loggedin'] == "true") ){
$_SESSION['loggedin'] = "true";
}
echo ($_SESSION['loggedin'] == "true" ? "You are logged in" : "Please Login to continue");
Puoi semplicemente usare questa funzione di personalizzazione:
function unset_cookie($cookie_name) {
if (isset($_COOKIE[$cookie_name])) {
unset($_COOKIE[$cookie_name]);
setcookie($cookie_name, null, -1);
} else { return false; }
}
Se desideri rimuovere $ _COOKIE ['account_utente'].
Usa solo:
unset_cookie('user_account');
Quando inserisci l' 0
ora, intendi "ora" (+ 0s da adesso è in realtà ora) per il browser ed elimina il cookie.
setcookie("key", NULL, 0, "/");
L'ho controllato nel browser Chrome che mi dà:
Name: key
Content: Deleted
Created: Sunday, November 18, 2018 at 2:33:14 PM
Expires: Sunday, November 18, 2018 at 2:33:14 PM
Basta impostare il valore di cookie su false
per disinserirlo,
setcookie('cookiename', false);
PS: - Questo è il modo più semplice per farlo.
Devi eliminare i cookie con php nel tuo server e anche con js per il tuo browser .. (Hanno creato con php, ma anche i file dei cookie sono nel client del browser):
Un esempio:
if ($_GET['action'] == 'exit'){
// delete cookies with js and then in server with php:
echo '
<script type="text/javascript">
var delete_cookie = function(name) {
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
};
delete_cookie("madw");
delete_cookie("usdw");
</script>
';
unset($_COOKIE['cookie_name']);
unset($_COOKIE['cookie_time']);
Molti di voi dimenticano che funzionerà solo su un computer locale. Su un dominio avrai bisogno di un modello come questo esempio.
setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);
setcookie
funziona per qualsiasi dominio, sia localhost o meno.
$cookie->delete()
da github.com/delight-im/PHP-Cookie utile. Il codice dalla domanda elimina solo la proprietà che è stata analizzata sul lato server. Il cookie continuerà a vivere sul lato client.