Создание файла cookie JavaScript на домене и его чтение в поддоменах - PullRequest
91 голосов
/ 15 апреля 2011

Ниже представлен файл cookie JavaScript, который записывается на компьютер пользователя в течение 12 месяцев.

После того, как мы установили файл cookie в нашем основном домене, например example.com, должен ли пользователь посещать субдомен, такой как test.example.comнам нужно продолжать идентифицировать активность пользователя в нашем «тестовом» поддомене.

Но с текущим кодом, как только они покидают www.example.com и посещают test.example.com, они больше не помечаютсякак "HelloWorld".

Может ли кто-нибудь помочь с моим кодом, чтобы разрешить чтение куки-файлов по поддоменам?

<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>

Ответы [ 4 ]

188 голосов
/ 15 апреля 2011

Просто установите атрибуты domain и path в вашем файле cookie, например:

<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>
26 голосов
/ 15 апреля 2011

Вы хотите:

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

Согласно RFC 2109 , чтобы файл cookie был доступен для всех поддоменов, вы должны поставить . перед вашим доменом.

При установке пути = / файл cookie будет доступен во всем указанном домене (он же .example.com).

4 голосов
/ 12 февраля 2016

Вот рабочий пример:

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

Это общее решение, которое берет корневой домен от объекта местоположения и устанавливает cookie. Это происходит потому, что вы не знаете, сколько поддоменов у вас есть, если есть.

1 голос
/ 28 октября 2016

Вы также можете использовать MDN JavaScript Cookie Framework и делать:

docCookies.setItem('HelloWorld', 'HelloWorld', myDate, '/', 'example.com');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...