Создание cookie JavaScript в домене и чтение его в поддоменах

Ниже приведен 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>

Ответ 1

Просто установите атрибуты 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>

Ответ 2

Вы хотите:

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

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

Настройка пути =/будет иметь куки файлы в пределах всего указанного домена (aka .example.com).

Ответ 3

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

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

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

Ответ 4

Вы также можете использовать MDN JavaScript Cookie Framework и выполните следующие действия:

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