web-dev-qa-db-fra.com

comment désinstaller un cookie en PHP?

J'ai besoin de comprendre comment désactiver ce cookie. Tout ce que j'ai essayé jusqu'à présent a échoué.

C'est ainsi que je le désactive actuellement et cela ne semble pas fonctionner.

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

Voici comment je l'ai défini:

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

J'ai cette fonction appelée set_session_from_cookie() qui vérifie si un cookie est défini, et s'il est défini, il démarre une nouvelle session en utilisant le cookie.

Le problème est que lorsque j'utilise ceci sur ma page, je ne peux pas me déconnecter. Je suppose que c'est parce que je ne peux pas annuler la session.

La raison pour laquelle j'ai cette fonction est que si un utilisateur veut se souvenir après avoir terminé la session, il peut redémarrer la session en appelant le cookie.

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

Se déconnecter:

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

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

J'ai placé mon cookie avec le code suivant:

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');
    }
}

Comment puis-je redémarrer la session en utilisant le cookie enregistré sans utiliser la fonction que j'ai créée? Étant donné que la fonction semble empêcher l'utilisateur de se déconnecter.

18
arboles

La solution à ce problème était que j'avais besoin de définir le chemin d'accès correct pour désactiver le cookie, car je le supprimais d'un fichier différent dans lequel je l'avais initialement défini.

J'ai découvert le chemin que je devais utiliser pour le désinstaller en recherchant le cookie dans les cookies de mon navigateur, et une fois que j'ai trouvé le cookie dans mon navigateur, le chemin était répertorié près du cookie. J'ai donc défini le chemin d'accès au cookie comme suit:

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

Le dernier paramètre est le chemin. Et ça a marché.

Mon setcookie d'origine ressemble à ceci:

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

Définissez la date d'expiration du cookie sur une heure antérieure (comme une seconde après Epoch , par exemple).

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

Cela entraînera l'expiration du cookie.

1 est utilisé à la place de 0, car 0 définit le cookie pour expirer à la fin de la session.

28
FThompson

Il y a peu de problèmes de sécurité concernant votre code, mais pour répondre à votre question, pour désactiver un cookie en php, tout ce que vous avez à faire est de définir l'heure d'expiration à une date antérieure:

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

"loginform.php" n'est pas un domaine valide, cela pourrait être le problème ici.

6
mohamed elbou

utilisez ce code

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

fonctionne à chaque fois pour moi dans chaque site Web

4
Vaibhav Gautam

Regardez le manuel php pour plus d'informations sur setcookie

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

Ces notes devraient expliquer le processus:

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

Les cookies doivent être supprimés avec les mêmes paramètres que ceux définis avec. Si l'argument valeur est une chaîne vide, ou FALSE, et que tous les autres arguments correspondent à un appel précédent à setcookie, le cookie portant le nom spécifié sera supprimé du client distant. Ceci est réalisé en interne en définissant la valeur sur "supprimé" et le délai d'expiration sur un an dans le passé.

Étant donné que la définition d'un cookie avec une valeur FALSE tentera de supprimer le cookie, vous ne devez pas utiliser de valeurs booléennes. À la place, utilisez 0 pour FAUX et 1 pour VRAI.

3
Magento Guy

Dans le manuel php, vous pouvez supprimer un cookie en définissant une date d'expiration dans le passé:

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

Dans certains cas, vous devez fournir un chemin et un domaine pour les arguments.

En fait, si vous attribuez un cookie avec une chaîne vide, il sera également non défini:

setcookie("key","");
1
Yinian Chin