Проверить на javascript существование cookie

143
14 декабря 2018, 14:30

На сайте в куку OTK я записываю источник перехода на сайт:

Функция getCookie возвращает cookie с именем name, если есть, если нет, то undefined

    
    function getCookie(name) { 
        var matches = document.cookie.match(new RegExp( 
            "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)" 
            )); 
        return matches ? decodeURIComponent(matches[1]) : undefined; 
    }

Если OTK еще не существует, то создадим ее и запишем туда источник перехода

    if ( (getCookie("OTK") === undefined) )
{     
    document.cookie = "OTK=" + escape(document.referrer) +"; expires=" + expire.toUTCString() +";";
}

Все это работает криво. Например:

Переходим на сайт извне. OTK создалась и там верное значение. Затем перейдем с главной вглубь сайта. На новой странице создается дублирующая кука OTK. теперь их 2: в одной правильный реферер, во второй адрес главной страницы моего сайта.

Как переписать проверку куку OTK на существование?

Если OTK еще не существует или если у нее нулевое значение, то перезаписать туда данные. А если она существует и не пустая, то не трогать ее.

Answer 1

Советую для работы с куками использовать две функции

function getCookie(name) { 
  var matches = document.cookie.match(new RegExp( 
    "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)" 
  )); 
  return matches ? decodeURIComponent(matches[1]) : undefined; 
} 
 
function setCookie(name, value, options) { 
  options = options || {}; 
 
  var expires = options.expires; 
 
  if (typeof expires == "number" && expires) { 
    var d = new Date(); 
    d.setTime(d.getTime() + expires * 1000); 
    expires = options.expires = d; 
  } 
  if (expires && expires.toUTCString) { 
    options.expires = expires.toUTCString(); 
  } 
 
  value = encodeURIComponent(value); 
 
  var updatedCookie = name + "=" + value; 
 
  for (var propName in options) { 
    updatedCookie += "; " + propName; 
    var propValue = options[propName]; 
    if (propValue !== true) { 
      updatedCookie += "=" + propValue; 
    } 
  } 
 
  document.cookie = updatedCookie; 
}

C помощью них ты гарантированно сможешь получить куку и установить ее, если она отсутствует.

READ ALSO
Удаление из строки всех символов кроме цифр и символа + вначале?

Удаление из строки всех символов кроме цифр и символа + вначале?

только такие варианты подходят вида +2992924004

131
Неправильная кодировка при записи в SQLite базу через JS файл

Неправильная кодировка при записи в SQLite базу через JS файл

Мне нужно создать приложение на NWJS + SQLite

143
Всплывающий блок при клике на кнопку

Всплывающий блок при клике на кнопку

Есть кнопка, как сделать, чтобы при клике, по центру экрана высвечивался блок div и при этом фон позади блока становился затемненным?

196
Как можно найти открытое окно браузера из другого открытого окна?

Как можно найти открытое окно браузера из другого открытого окна?

Запускаю две странички на разных экранахСтранички с одного домена, в обеих могу дописать все что понадобиться

145