что не так с toDateString - PullRequest
       0

что не так с toDateString

2 голосов
/ 23 сентября 2011

Ниже приведен скрипт + 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 ]

4 голосов
/ 23 сентября 2011

Если вы попробуете их обоих в консоли, вы увидите, что они не дают одинаковую результирующую строку вообще:

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

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

Когда вы устанавливаете cookie , вы должны указатьвремя в формате GMT ​​, если ваш браузер не может распознать время истечения и считает, что ни один из них не был указан. Если срок действия не указан, cookie создаются как «сеансовые cookie» , срок действия которых истекает после окончания сеанса (например, вы закрываете браузер).

Так, когда вы используете toDateString (),это недопустимый формат срока действия, ваш браузер удаляет его и использует значение по умолчанию для создания файла cookie сеанса.

1 голос
/ 23 сентября 2011

Это связано с форматом, выводимым из toDateString(), который недопустим для указания даты истечения срока действия файла cookie.* toDateString() - Fri Sep 23 2011 * toGMTString() - Fri, 23 Sep 2011 16:31:24 GMT

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

0 голосов
/ 23 сентября 2011

toDateString не создает действительную дату - нет часового пояса и данные о времени не включены. Строка toGMT возвращает однозначное время.

Я всегда хотел использовать целочисленную метку времени, но метка времени javascript в миллисекундах в тысячу раз больше формата секунд 'unix'.

Всегда есть максимальный возраст .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...