2016-01-29 3 views
2

Я создаю и устанавливаю cookie через фрагмент кода, который я создал ниже.Как правильно обновить файл cookie?

Когда я пытаюсь захватить document.cookie, чтобы убедиться, что мой файл cookie был создан правильно, я вижу несоответствие.

Позвольте мне уточнить:

Я использую 50/50 генератор случайных чисел а, порожденная Math.floor(Math.random() * 2) и хранящийся в cookieValue. Поэтому я гарантирую, что у меня всегда есть 0 или 1 в качестве значения моего cookie. Это, как и остальные параметры, будет частью cookieStr, который будет передан на document.cookie, чтобы создать файл cookie.

Однако, чтобы убедиться, что это правильно произошло, мне нужно убедиться, что текущий файл cookie SomeCookieName имеет то же значение, что и выход моего console.log(cookieStr). Это означает, что я правильно обновляю cookie динамически.

Один быстрый взгляд на код ниже (в консоли), и я могу сказать, что что-то не так. Он всегда имеет SomeCookieName из 0, где, когда генератор случайных чисел будет выводить 0 и 1 соответственно.

TL; DR:

Я считаю, что я не правильно обновить значение параметра SomeCookieName должным образом, который должен быть либо 0 или 1 на основе случайной функции cookieValue; но я не знаю, почему это происходит. Что я делаю не так?

var hoursToAdd = 3, 
    daysToAdd = 10, 
    cookieValue = Math.floor(Math.random() * 2), // Random value 0 or 1 
    cookieName = "SomeCookieName", 
    cookiePath = "/", 
    cookieDomain = "*.somedomainname.com"; 

setCookie(cookieName, cookieValue, 0, hoursToAdd, cookiePath, cookieDomain); 

console.log(document.cookie); 

function setCookie(c_name, c_value, c_exdays, c_exhours, c_path, c_domain) { 
    var exdate = new Date(), 
     cookieStr = ""; 

    // Setting up the cookie value 
    cookieStr = c_name + "=" + escape(c_value) + "; "; 

    // Determining the expiration date increase: days or hours 
    if (c_exdays) { // Adds days to current date 
    exdate.setDate(exdate.getDate() + (c_exdays)); 
    } 
    else if (c_exhours) { // Adds hours to current date 
    exdate.setHours(exdate.getHours() + c_exhours); 
    } 

    // Setting up the cookie expiration date 
    cookieStr += "expires=" + exdate.toUTCString() + "; "; 

    // Setting up the cookie Path 
    if (c_path) { 
    cookieStr += "path=" + c_path + "; "; 
    } 

    // Setting up the cookie Domain 
    if (c_domain) { 
    cookieStr += "domain=" + c_domain + "; "; 
    } 

    console.log(cookieStr); 

    // Creating the cookie 
    document.cookie = cookieStr; 
} 

EDIT: добавление вывода журнала консоли.

Выход консоли, на который я смотрю, кажется неустойчивым ко мне. Это потому, что я ожидаю, что значение SomeCookieName должно быть одинаковым каждый раз. Обратите внимание, что есть два console.log, посмотрите на фрагмент выше и попробуйте сами посмотреть на консольный выход:

SomeCookieName = 0; expires = Пт, 29 Янв. 2016 23:14:34 GMT; Путь = /; домен = * somedomainname.com.

SomeCookieName = 0; _ga = GA1.2.988843064.1445444954; BCSI-CS-9cd60cd21b772d48 = 2

SomeCookieName = 1; expires = Fri, 29 января 2016 23:14:35 GMT; Путь = /; домен = * somedomainname.com.

SomeCookieName = 0; _ga = GA1.2.988843064.1445444954; BCSI-CS-9cd60cd21b772d48 = 2

SomeCookieName = 1; expires = Пт, 29 Янв. 2016 23:14:36 ​​GMT; Путь = /; домен = * somedomainname.com.

SomeCookieName = 0; _ga = GA1.2.988843064.1445444954; BCSI-CS-9cd60cd21b772d48 = 2

SomeCookieName = 1; expires = Пт, 29 Янв. 2016 23:15:02 GMT; Путь = /; домен = * somedomainname.com.

SomeCookieName = 0; _ga = GA1.2.988843064.1445444954; BCSI-CS-9cd60cd21b772d48 = 2

SomeCookieName = 1; expires = Fri, 29 января 2016 23:15:03 GMT; Путь = /; домен = * somedomainname.com.

SomeCookieName = 0; _ga = GA1.2.988843064.1445444954; BCSI-CS-9cd60cd21b772d48 = 2

+0

работает для меня: https://jsfiddle.net/2oh4665w/ – Fabricator

+0

@Fabricator вы можете уточнить? Я смотрю на вывод консоли, и я вижу, что значения для SomeCookieName – AGE

+0

отличаются друг от друга, поэтому он устанавливает значение 0 или 1 каждый раз. вы ожидаете, что значение cookie будет придерживаться после того, как оно будет установлено в первый раз? – Fabricator

ответ

1

Если включить параметр domain при установке document.cookie, то для того, чтобы прочитать, что куки, то domain должен соответствовать домен/поддомен страницы, где скрипт работает.

В этом случае вы, вероятно, установите SomeCookieName=0 с доменом, ранее, при тестировании. Затем вы попытались изменить его, но вы включили недопустимый domain, поэтому cookie не был установлен.

Если вы сделаете domain в соответствии с фактическим доменом или полностью опустите его, cookie будет установлен и изменен при его сбросе.

+0

Спасибо! Я понятия не имел, что это произойдет, особенно потому, что ошибки, где не выбрасываются недопустимые параметры, т. Е. Неверный домен – AGE

Смежные вопросы