我正在使用设置cookie的功能。此功能允许将cookie名称,cookie值和cookie的额外到期日期传递给它。
功能:
function setCookie(name, value, exdate) {
var c_value = escape(value) + ((exdate === null || exdate === undefined) ? "" : "; expires=" + exdate);
document.cookie = name + "=" + c_value;
};
用法:
setCookie("my-cookie-name","my-value","Sun, 15 Jul 2012 00:00:01 GMT");
我已经使用了上面日期格式的函数,并且相信它是跨浏览器兼容的,因为我已经测试过,如果cookie在关闭各种浏览器并重新打开后仍然存在。我发现使用像"15 Jul 2012"
这样的格式时会出现问题。这种格式在firefox的开发过程中适用于我,但其他浏览器似乎只将cookie设置为会话cookie。
我应该坚持使用这种格式:“Sun,2012年7月15日00:00:01格林威治标准时间”或者是否有其他格式我可以用于有效期限的主要浏览器(IE 7) -9,Firefox,Chrome,Opera,Safari)?
修改/更新:
Cookie要求有效期限为 UTC / GMT格式(请参阅下面的答案)。
我已将我的功能编辑为以下内容,以便转换任何不是核心格式的日期。
function setCookie(name, value, exdate) {
//If exdate exists then pass it as a new Date and convert to UTC format
(exdate) && (exdate = new Date(exdate).toUTCString());
var c_value = escape(value) + ((exdate === null || exdate === undefined) ? "" : "; expires=" + exdate);
document.cookie = name + "=" + c_value;
};
答案 0 :(得分:33)
根据测试并进一步阅读此内容,Cookie需要 UTC / GMT格式的日期,例如 Sun,2012年7月15日00:00:01 GMT
因此,其他格式的日期,例如 2012年7月15日,或 15 / Jul / 2012 或 07/15/2012 ,必须作为new Date
对象传递,然后通过toUTCString()
或toGMTString()
函数传递。
因此我将我的功能编辑为以下内容:
function setCookie(name, value, exdate) {
//If exdate exists then pass it as a new Date and convert to UTC format
(exdate) && (exdate = new Date(exdate).toUTCString());
var c_value = escape(value) + ((exdate === null || exdate === undefined) ? "" : "; expires=" + exdate);
document.cookie = name + "=" + c_value;
};
答案 1 :(得分:3)
The syntax specified in rfc 6265 for generating Set-Cookie headers使用
rfc1123-date = wkday "," SP date1 SP time SP "GMT"
Cookie日期格式,因此"Sun, 15 Jul 2012 00:00:01 GMT"
有效。
如果我理解正确,parsing algorithm会识别其他格式,例如:00:00:01 15 jul 2012
,但不应生成它们。
答案 2 :(得分:0)
找到日期格式MMMM dd,yyyy,hh:mm:ss aaa。愿有人发现有用。这里也非常好的链接enter link description here