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

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

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

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

Сможет ли кто-нибудь помочь с моим кодом, чтобы 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;
</script>

4 ответа

Решение

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

Ты хочешь:

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

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

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

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

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

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

docCookies.setItem('HelloWorld', 'HelloWorld', myDate, '/', 'example.com');
Другие вопросы по тегам