web-dev-qa-db-fra.com

Javascript document.cookie chaîne toujours vide

J'ai ce problème vraiment étrange avec les cookies de configuration javascript côté client. Je développe actuellement une petite démo d'une page pour utiliser des cookies afin de stocker certaines "préférences". Veuillez noter que je ne peux pas utiliser de langage côté serveur pour cette démo ni aucun plug-in jQuery tiers.

J'ai donc écrit un objet javascript pour créer un cookie:

var cookie = {
  set: function (name,value,exdays) {

    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var value = escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
    document.cookie=name + "=" + value;
    console.log(document.cookie);
  }
}

cookie.set('foo','bar',2);
console.log(document.cookie);

Il retourne simplement une chaîne vide. Je suis allé dans la console Chrome pour voir si je pouvais le faire en modifiant directement le document.cookie

> document.cookie = "foo=bar";
"foo=bar"
> document.cookie
""

Comment définir un cookie via javascript côté client?

Modifier: je ne suis pas en mode navigation privée et les cookies sont activés.

30
Menztrual

Vous ne pouvez pas configurer les cookies à la vue si rien ne se passe sur un serveur Web.

file:///C:/Users/me/Desktop/demo/demo.html

toutefois:

http://localhost/demo/demo.html fonctionne.

41
Menztrual

Les cookies HttpOnly ne sont pas accessibles à partir de Javascript et les cookies de session sont généralement définis comme des cookies HttpOnly. Voir aussi cette question StackOverflow: Comment lire un cookie sécurisé avec JavaScript

Alors ... vérifiez si le cookie que vous voulez lire a le drapeau "HttpOnly" ... Si oui, vous connaissez le coupable. Ce n'est pas un bug, c'est une fonctionnalité!

49
Stijn de Witt

Cela a fonctionné pour moi lorsque exécuté à partir de localhost, exécutant canary chrome 28.0.1472.0:

<!DOCTYPE html>
<html>
<head>
  <title>localhost cookie</title>
</head>
<body>
  <script type="text/javascript">
    console.log(document.cookie);
    var myCookie = "mycookie=hellocookie";
    document.cookie = myCookie;
  </script>
</body>
</html>

Exécutez-le sur un serveur, visitez la page et consultez votre magasin de cookies, actualisez la page et consultez votre console.

Il n’a pas défini de cookie lorsqu’il est ouvert en tant que fichier, mais a fonctionné à chaque ouverture du serveur.

0
poida

Pour l'utilisation et la documentation, voir ici:

https://developer.mozilla.org/en-US/docs/DOM/document.cookie

Si vous êtes en Mode incognito ou si les cookies sont désactivés, cela ne fonctionnera pas.

0
Aram Kocharyan