我正在通过下面创建的代码段创建并设置Cookie。
当我尝试抓住document.cookie
以验证我的Cookie是否已正确创建时,我发现差异。
请允许我详细说明:
我正在使用由Math.floor(Math.random() * 2)
生成并存储在cookieValue
内的50/50随机数生成器。因此,我确保我总是有一个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;
}
编辑:添加控制台日志输出。
我看到的控制台输出对我来说似乎不稳定。那是因为我希望SomeCookieName
值每次都应该是。请注意,有两个console.log
查看上面的代码段并尝试自己查看控制台输出:
SomeCookieName = 0; expires = Fri,2016年1月29日23:14:34 GMT;路径= /;域= * somedomainname.com。
SomeCookieName = 0; _ga = GA1.2.988843064.1445444954; BCSI-CS-9cd60cd21b772d48 = 2
SomeCookieName = 1;到期= 2016年1月29日星期五23:14:35 GMT;路径= /;域= * somedomainname.com。
SomeCookieName = 0; _ga = GA1.2.988843064.1445444954; BCSI-CS-9cd60cd21b772d48 = 2
SomeCookieName = 1;到期= 2016年1月29日星期五23:14:36 GMT;路径= /;域= * somedomainname.com。
SomeCookieName = 0; _ga = GA1.2.988843064.1445444954; BCSI-CS-9cd60cd21b772d48 = 2
SomeCookieName = 1;到期= 2016年1月29日星期五23:15:02 GMT;路径= /;域= * somedomainname.com。
SomeCookieName = 0; _ga = GA1.2.988843064.1445444954; BCSI-CS-9cd60cd21b772d48 = 2
SomeCookieName = 1; expires = 2016年1月29日星期五23:15:03 GMT;路径= /;域= * somedomainname.com。
SomeCookieName = 0; _ga = GA1.2.988843064.1445444954; BCSI-CS-9cd60cd21b772d48 = 2
答案 0 :(得分:1)
如果在设置domain
时包含document.cookie
参数,那么为了读取该Cookie,domain
必须与运行脚本的网页的域/子域匹配。
在这种情况下,您可能会在测试时更早地设置SomeCookieName=0
域名。然后,您尝试更改它,但是您包含了无效的domain
,因此未设置Cookie。
如果您使domain
与您的实际域名匹配,或者完全省略该域名,则会在您重置Cookie时设置并更改。