toDateString有什么问题

时间:2011-09-23 16:21:20

标签: javascript cookies

以下是一个脚本+ HTML,告诉用户他上次访问页面。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Cookie</title>
<script type="text/javascript">
window.onload = initLastVisit;

function initLastVisit() {
var now = new Date();
var last = new Date();
now.setMonth(now.getMonth()+6);
document.cookie = "lastVisit=" + last.toDateString() + ";path=/;expires=" + now.toGMTString();
document.getElementById("lastVisitedOn").innerHTML = document.cookie.split("=")[1];
}
</script>
</head>

<body>
<form>
<label>Enter your name&nbsp;&nbsp;<input type="text" id="name_field" /></label> <br/>
</form>
<h1 id="lastVisitedOn"></h1>
</body>
</html>

在上述脚本中设置cookie的语句是:document.cookie = "lastVisit=" + last.toDateString() + ";path=/;expires=" + now.toGMTString();。如果在此我将now.toGMTString()替换为now.toDateString(),则浏览器中的过期时间为“当我关闭浏览器时过期”。这是为什么 ? toGMTString没关系。到期日期为2012年3月,符合预期。

3 个答案:

答案 0 :(得分:4)

如果你在控制台中同时尝试它们,你会发现它们根本没有给出相同的结果字符串:

(new Date()).toGMTString();
"Fri, 23 Sep 2011 16:33:01 GMT"

(new Date()).toDateString();
"Fri Sep 23 2011"

当你设置一个cookie you have to specify the time using GMT format时,如果你没有设置你的浏览器无法识别到期时间并认为没有指定。 When no expiry date is specified, cookie are created as "session cookie",会话结束后到期(例如,您关闭浏览器)。

因此,当您使用toDateString()时,它是无效的过期格式,您的浏览器将其丢弃并使用其创建会话cookie的默认值。

答案 1 :(得分:1)

这是由toDateString()输出的格式造成的,该格式对于指定cookie的到期日期无效。 * toDateString() - Fri Sep 23 2011 * toGMTString() - Fri, 23 Sep 2011 16:31:24 GMT

由于日期字符串未被识别,因此cookie将使用默认行为并在会话结束时到期。

答案 2 :(得分:0)

toDateString不生成有效日期 - 没有时区,也没有包含时间数据。 toGMT字符串返回明确时间。

我总是希望得到一个整数时间戳,但javascript时间戳是毫秒 - 比'unix'秒格式大一千倍。

始终 max-age