web-dev-qa-db-fra.com

Création d'un cookie JavaScript sur un domaine et lecture de celui-ci sur plusieurs sous-domaines

Vous trouverez ci-dessous un cookie JavaScript écrit sur l'ordinateur de l'utilisateur pendant 12 mois.

Après avoir défini le cookie sur notre domaine principal tel que example.com, si l'utilisateur devait visiter un sous-domaine tel que test.example.com, nous devons continuer à identifier l'activité de l'utilisateur sur notre sous-domaine "test".

Mais avec le code actuel, dès qu'ils quittent www.example.com et visitent test.example.com, ils ne sont plus marqués comme "HelloWorld".

Est-ce que n'importe qui pourrait m'aider avec mon code pour permettre au cookie d'être lu à travers les sous-domaines?

<script type="text/javascript">
  var cookieName = 'HelloWorld';
  var cookieValue = 'HelloWorld';
  var myDate = new Date();
  myDate.setMonth(myDate.getMonth() + 12);
  document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate;
</script>
92
Evan

Il suffit de définir les attributs domain et path sur votre cookie, comme suit:

<script type="text/javascript">
var cookieName = 'HelloWorld';
var cookieValue = 'HelloWorld';
var myDate = new Date();
myDate.setMonth(myDate.getMonth() + 12);
document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate 
                  + ";domain=.example.com;path=/";
</script>
189
aroth

Tu veux:

document.cookie = cookieName +"=" + cookieValue + ";domain=.example.com;path=/;expires=" + myDate;

Conformément à la RFC 2109 , pour qu'un cookie soit disponible pour tous les sous-domaines, vous devez placer un . devant votre domaine.

Si vous définissez le chemin = /, le cookie sera disponible dans l’ensemble du domaine spécifié (alias .example.com).

26
Mike Lewis

Voici un exemple de travail:

document.cookie = "testCookie=cookieval; domain=." + 
location.hostname.split('.').reverse()[1] + "." + 
location.hostname.split('.').reverse()[0] + "; path=/"

Il s'agit d'une solution générique qui extrait le domaine racine de l'objet location et définit le cookie. Le renversement est dû au fait que vous ne savez pas combien de sous-domaines vous avez le cas échéant.

4
caseyjustus

Vous pouvez également utiliser = MDN JavaScript Cookie Framework et faire:

docCookies.setItem('HelloWorld', 'HelloWorld', myDate, '/', 'example.com');
1
rebagliatte