JS Cookie для сайта и всех поддоменов сайта

  • Vadim Tsukanov
    Разработчик
  • Дата публикации
    28.03.2024
  • Категория
    JavaScript
Задача:Показывать модальное окно с выбором региона сайта. На всех регионах - единожды.

Иногда необходимо прокинуть какие-нибудь данные на все поддомены сайта. Например, выбор города или языка сайта для посетителя. Но любые localStorage и и т.д.  имеют встроенную защиту на cross-origin…

У себя на проекте я решил проблему при помощи кук. А для того, чтобы кука была доступна на всех поддоменах — использовал небольшой хак, который нашел на просторах интернета. Авторство не присваиваю, просто сохраню себе и Вам для простоты поиска.

 

var Cookie =
{
   set: function(name, value, days)
   {
      var domain, domainParts, date, expires, host;

      if (days)
      {
         date = new Date();
         date.setTime(date.getTime()+(days*24*60*60*1000));
         expires = "; expires="+date.toGMTString();
      }
      else
      {
         expires = "";
      }

      host = location.host;
      if (host.split('.').length === 1)
      {
         document.cookie = name+"="+value+expires+"; path=/";
      }
      else
      {
         domainParts = host.split('.');
         domainParts.shift();
         domain = '.'+domainParts.join('.');

         document.cookie = name+"="+value+expires+"; path=/; domain="+domain;
         if (Cookie.get(name) == null || Cookie.get(name) != value)
         {
            domain = '.'+host;
            document.cookie = name+"="+value+expires+"; path=/; domain="+domain;
         }
      }
   },

   get: function(name)
   {
      var nameEQ = name + "=";
      var ca = document.cookie.split(';');
      for (var i=0; i < ca.length; i++)
      {
         var c = ca[i];
         while (c.charAt(0)==' ')
         {
            c = c.substring(1,c.length);
         }

         if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
      }
      return null;
   },

   erase: function(name)
   {
      Cookie.set(name, '', -1);
   }
};

 

Еще нет коммментариев. Будь первым!

Оформить заказ в Devstages