Réponses:
Vous pouvez essayer ceci
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['remember_user']);
setcookie('remember_user', null, -1, '/');
return true;
} else {
return false;
}
unset($_COOKIE['Hello']);
. Cela ne change rien si vous le supprimez.
unset($_COOKIE['Hello']);
est en fait important si vous pouvez vérifier le cookie quelque part plus tard dans le code.
Définissez la valeur sur "" et la date d'expiration sur hier (ou toute date antérieure)
setcookie("hello", "", time()-3600);
Ensuite, le cookie expirera lors du prochain chargement de la page.
Une façon propre de supprimer un cookie consiste à effacer à la fois la $_COOKIE
valeur et le fichier de cookie du navigateur:
if (isset($_COOKIE['key'])) {
unset($_COOKIE['key']);
setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
setcookie
appel:setcookie('key', '', time() - 3600, '/');
unsetting
avec succès.
null
valeurs, vous devrez utiliser array_key_exists () à la place, car un cookie avec une null
valeur ne sera pas trouvé par une isset()
vérification.
Pour supprimer un cookie de manière fiable, il ne suffit pas de le configurer pour qu'il expire à tout moment dans le passé, tel que calculé par votre serveur PHP. En effet, les ordinateurs clients peuvent et ont souvent des heures différentes de celles de votre serveur.
La meilleure pratique consiste à remplacer le cookie actuel par un cookie vierge qui expire une seconde dans le futur après l'époque (1er janvier 1970 00:00:00 UTC), comme suit:
setcookie("hello", "", 1);
Cela supprimera le cookie dans votre code, mais comme la variable $ _COOKIE est actualisée à chaque demande, elle reviendra simplement à la demande de page suivante.
Pour supprimer le cookie, définissez la date d'expiration dans le passé:
// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
unset()
cookie n'est-il pas nécessaire ?
J'ai eu le même problème dans mon code et j'ai constaté qu'il s'agissait d'un problème de chemin d'accès aux cookies. Consultez ce message de débordement de pile: impossible de supprimer le cookie de jeu php
J'avais défini le cookie en utilisant une valeur de chemin d'accès "/", mais je n'avais aucune valeur de chemin d'accès lorsque j'essayais de l'effacer, donc il ne s'est pas effacé. Voici donc un exemple de ce qui a fonctionné:
Définition du cookie:
$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Effacer le cookie:
setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);
J'espère que cela pourra aider.
Si vous avez configuré le cookie pour qu'il expire dans le passé, le navigateur le supprimera. Voir l' exemple de suppression de setcookie () sur php.net
Voir l'exemple intitulé " Exemple # 2 exemple de suppression de setcookie () " dans la documentation PHP. Pour effacer un cookie du navigateur, vous devez informer le navigateur que le cookie a expiré ... le navigateur le supprimera ensuite. unset
comme vous l'avez utilisé, il supprime simplement le cookie «bonjour» du tableau COOKIE.
Voici comment fonctionne le code PHP v7 setcookie ():
<?php
setcookie('user_id','');
setcookie('session','');
?>
À partir de la sortie de tcpdump en reniflant sur le port 80, le serveur envoie au client (navigateur) les en-têtes HTTP suivants:
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
En observant les paquets dans les requêtes suivantes, le navigateur n'envoie plus ces cookies dans les en-têtes
Pour supprimer le cookie, il vous suffit de définir la valeur sur NULL:
"Si vous avez défini un cookie avec des valeurs non par défaut pour un délai d'expiration, un chemin ou un domaine, vous devez fournir à nouveau ces mêmes valeurs lorsque vous supprimez le cookie pour que le cookie soit supprimé correctement." Citation du livre "Learning PHP5".
Donc, ce code devrait fonctionner (fonctionne pour moi):
Définition du cookie:
setcookie('foo', 'bar', time() + 60 * 5);
Suppression du cookie:
setcookie('foo', '', time() + 60 * 5);
Mais j'ai remarqué que tout le monde fixait la date d'expiration au passé, est-ce nécessaire et pourquoi?
''
n'est pas la même chose que null
.
Pour supprimer tous les cookies, vous pouvez écrire:
foreach ($_COOKIE as $key => $value) {
unset($value);
setcookie($key, '', time() - 3600);
}
Définissez simplement la date d'expiration sur une heure, si vous souhaitez "supprimer" le cookie, comme ceci:
setcookie ("TestCookie", "", time() - 3600);
ou
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
Source: http://www.php.net/manual/en/function.setcookie.php
Vous devez utiliser la filter_input()
fonction pour tous les globaux qu'un visiteur peut entrer / manipuler, comme ceci:
$visitors_ip = filter_input(INPUT_COOKIE, 'id');
Vous pouvez en savoir plus à ce sujet ici: http://www.php.net/manual/en/function.filter-input.php et ici: http://www.w3schools.com/php/func_filter_input.asp
Je sais qu'il y a longtemps que ce sujet n'a pas été créé mais j'ai vu une petite erreur dans cette solution (je peux l'appeler comme ça, car c'est un détail). Je suis d'accord que la meilleure solution est probablement cette solution:
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
return true;
} else {
return false;
}
Mais, dans le cas présent, vous supprimez les cookies dans tous les cas où la fonction non définie fonctionne et vous créez immédiatement de nouveaux cookies expirés au cas où la fonction non définie ne fonctionnerait pas.
Cela signifie que même si la fonction non définie fonctionne, elle contiendra toujours 2 cookies sur l'ordinateur. L'objectif demandé, d'un point de vue logique, est de supprimer les cookies si cela est possible et si ce n'est vraiment pas le cas, de les faire expirer; pour obtenir le résultat "le plus propre".
Donc, je pense que nous devrions mieux faire:
if (isset($_COOKIE['remember_user'])) {
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
return true;
} else {
return false;
}
Merci et bonne journée :)
$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.
Si vous souhaitez supprimer complètement le cookie de tout votre domaine actuel, le code suivant vous aidera certainement.
unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");
Ce code supprimera complètement la variable cookie de tout votre domaine, c'est-à-dire; "/" - il indique que la valeur de la variable de cookie est définie pour tout le domaine et pas seulement pour le domaine ou le chemin actuel. time () - 300 indique qu'il est défini sur une heure précédente, il expirera donc.
Voilà comment il est parfaitement supprimé.
Vous pouvez définir une variable de session basée sur les valeurs des cookies
session_start();
if(isset($_COOKIE['loggedin']) && ($_COOKIE['loggedin'] == "true") ){
$_SESSION['loggedin'] = "true";
}
echo ($_SESSION['loggedin'] == "true" ? "You are logged in" : "Please Login to continue");
Vous pouvez simplement utiliser cette fonction de personnalisation:
function unset_cookie($cookie_name) {
if (isset($_COOKIE[$cookie_name])) {
unset($_COOKIE[$cookie_name]);
setcookie($cookie_name, null, -1);
} else { return false; }
}
Si vous souhaitez supprimer $ _COOKIE ['user_account'].
Utilisez simplement:
unset_cookie('user_account');
Lorsque vous entrez 0
pour le temps, vous voulez dire "maintenant" (+ 0 à partir de maintenant est en fait maintenant) pour le navigateur et il supprime le cookie.
setcookie("key", NULL, 0, "/");
Je l'ai vérifié dans le navigateur Chrome qui me donne:
Name: key
Content: Deleted
Created: Sunday, November 18, 2018 at 2:33:14 PM
Expires: Sunday, November 18, 2018 at 2:33:14 PM
Définissez simplement la valeur du cookie false
pour le désactiver,
setcookie('cookiename', false);
PS: - C'est la façon la plus simple de le faire.
Vous devez supprimer les cookies avec php dans votre serveur et aussi avec js pour votre navigateur .. (Ils l'ont fait avec php, mais les fichiers cookies sont également dans le client du navigateur):
Un exemple:
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']);
La plupart d'entre vous oublient que cela ne fonctionnera que sur une machine locale. Sur un domaine, vous aurez besoin d'un modèle comme cet exemple.
setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);
setcookie
fonctionne pour n'importe quel domaine, qu'il soit localhost ou non.
$cookie->delete()
sur github.com/delight-im/PHP-Cookie utile. Le code de la question supprime simplement la propriété qui a été analysée côté serveur. Le cookie continuera de vivre côté client.