web-dev-qa-db-fra.com

setcookie () ne définit pas de cookie dans Google Chrome

Je passe par quelques PHP tutoriels sur la façon de paramétrer les cookies. J'ai remarqué que les cookies sont correctement définis sur FF4 et IE9, mais ils ne sont pas définis dans Chrome (11.0.696.60). Le fichier PHP a été servi à partir de XAMPP (localhost).

J'ai essayé l'exemple de w3schools:

<?php
setcookie("user", "Alex Porter", time()+3600);
?>

Et depuis ce site (pour les environnements locaux):

<?php
setcookie("username", "George", false, "/", false);
?>

Merci d'avance.

32
Elyas

La désactivation des cookies pour les adresses IP et localhost était une décision de conception. Voir aussi: https://code.google.com/p/chromium/issues/detail?id=56211

Les moyens de contourner le problème sont les suivants:

  • Définissez un domaine local (par exemple, modifiez /etc/hosts utiliser 127.0.0.1 localhost.com).
  • Utilisez http://myproject.localhacks.com/ (qui pointe vers 127.0.0.1).
  • Utilisez une valeur de domaine vide lors de la configuration du cookie.

Par exemple, dans PHP :

setcookie(
  $AUTH_COOKIE_NAME,
  $cookie_value,
  time() + cookie_expiration(),
  $BASE_DIRECTORY,
  null,
  false,
  true
);

Ici, la valeur null indique que le domaine ne doit pas être défini.

Remarque: le fait de ne pas définir le domaine empêche le cookie d'être visible pour les sous-domaines.

39
Mike West

Le domaine doit être égal à NULL.

& Doit recevoir une date d'expiration. c'est à dire.,

setcookie("username", "George", time() + (20 * 365 * 24 * 60 * 60), "/", NULL);
14
John Chornelius

Il semble que cela puisse être un bogue avec la fonctionnalité "Developer Tools" de Chrome. Pendant tout ce temps, j'essayais de définir un cookie (mais pas de le récupérer) et cela a fonctionné avec l'autre navigateur. Cela a fonctionné, en supposant que vous faites confiance à la section d'affichage des cookies de FF ou localisez le fichier du cookie pour IE. Dans Chrome je comptais sur la section "Cookies" des "Outils développeurs" (Outils développeurs> Ressources> Cookies).

J'ai décidé d'aller plus loin et de produire la valeur du cookie en utilisant ce script trouvé dans WHT ( publié par Natcoweb ):

<?php
setcookie('test', 'This is a test', time() + 3600);
if(isset($_COOKIE['test'])){
$cookieSet = 'The cookie is ' . $_COOKIE['test'];
} else {
$cookieSet = 'No cookie has been set';
}
?>

<html>
<head><title>cookie</title></head>
<body>

<?php
echo $cookieSet;
?>

</body>
</html>

Et cela a fonctionné sur tous les navigateurs, y compris Chrome (je reçois: "Le cookie est ceci est un test")! Cependant, l'inspecteur des cookies de Chrome continue de montrer "Ce site n'a pas de cookies". J'ai également réussi à trouver la liste des cookies stockés dans les paramètres de Chrome (Options> Sous le capot> Paramètres de contenu> Tous les cookies et les données du site) et enfin trouvé le cookie (plus d'étapes à vérifier mais au moins plus précis que les outils de développement)!

Conclusion: les cookies étaient définis, mais les outils de développement de Chrome ne peuvent pas le voir pour une raison quelconque.

5
Elyas

Avez-vous vérifié la date de votre système? $ date Et si elle est ancienne, vous devez changer votre heure $ date -s 2007.04.08-22: 46 + 0000

J'espère que ça aide. J'ai eu le même problème et ça a marché

2
Sahin Yanlık

J'ai rencontré le même problème lorsque j'ai essayé comme ci-dessous

setcookie("gb_role",base64_encode($_SESSION["role"]),time()+60*60*24*30);

quand je l'ai changé en dessous

setcookie("gb_role",base64_encode($_SESSION["role"]),time()+2592000);

Je viens de bien travailler, la différence est au lieu de time () + 60 * 60 * 24 * 30 je viens de faire time () + un travail de valeur numérique. Je sais que cela n'a pas de sens mais cela a fonctionné.

1
Satya

Ce code fonctionne pour moi dans IE, Chrome et FF

if($_COOKIE['language']==NULL || empty($_COOKIE['language']))
{


    $dirname = rtrim(dirname($_SERVER['PHP_SELF']), '/').'/';

    $expire=time()+31536000;


    setcookie("language", "English",$expire,"$dirname","mydomain.com",false,false);
}
1
Dorar