Куки
Одну из возможностей сохранения данных в javascript представляет использование куки. Для работы с куками в объекте document предназначено свойство cookie
.
Для установки куков достаточно свойству document.cookie
присвоить строку с куками:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<script>
document.cookie = "login=tom32;";
</script>
</body>
</html>
В данном случае устанавливается кука, которая называется login
и которая имеет значение tom32
. В браузере можно ее посмотреть, узнать всю информацию о ней и в дальнейшем ее можно использовать в приложении.
Строка куки принимает до шести различных параметров:
Имя куки
Значение куки
path
URL-префикс пути, куки будут доступны для страниц под этим путём. Должен быть абсолютным. По умолчанию используется текущий путь. Если куки установлено сpath=/admin
, то оно будет доступно на страницах/admin
и/admin/something
, но не на страницах/home
или/adminpage
. Как правило, указывают в качестве пути кореньpath=/
, чтобы наше куки было доступно на всех страницах сайтаdomain
домен на котором доступны наши куки. На практике, однако, есть ограничения – мы не можем указать здесь какой угодно домен. По умолчанию куки доступно лишь тому домену, который его установил. Так что куки, которые были установлены сайтомsite.com
, не будут доступны на сайтеother.com
, мы не сможем получить эти куки на поддоменеforum.site.com
expires
если куки не имеют этого параметра, они удалятся при закрытии браузера. Такие куки называются сессионными. Чтобы помочь куки пережить закрытие браузера, мы можем установить значение опцийexpires
илиmax-age
secure
куки следует передавать только по HTTPS-протоколу. По умолчанию куки, установленные сайтомhttp://site.com
, также будут доступны на сайтеhttps://site.com
и наоборот. Таким образом, если в куки хранится конфиденциальная информация, которую не следует передавать по незашифрованному протоколу HTTP, то нужно установить этот флаг
Куки имеет очень ограниченный срок жизни: если явным образом не установить срок действия, то кука будет удалена с закрытием браузера. Подобная ситуация, возможно, идеальна для тех случаев, когда необходимо удалять всю информацию после завершения работы с веб-приложением и закрытия браузера. Однако данное поведение не всегда подходит, в этом случае нам надо установить параметр expires
, то есть срок действия куков:
document.cookie = "login=tom32;expires=Mon, 31 Aug 2015 00:00:00 GMT;";
Срок действия куки login
истекает в понедельник 31 августа 2015 года в 00:00. Формат параметра expires
очень важен, его можно сгенерировать программно. Для этого мы можем использовать метод toUTCString()
объекта Date
, в данном случае срок действия куки будет составлять 4 часа:
var expire = new Date();
expire.setHours(expire.getHours() + 4);
document.cookie = "login=tom32;expires=" + expire.toUTCString() + ";";
Если нам надо установить куки для какого-то определенного пути на сайте, мы можем использовать параметр path
. Например, мы хотим установить куки только для пути www.mysite.com/home
, в этом случае для других путей на сайте, эти куки будут недоступны:
document.cookie = "login=tom32;expires=Mon, 31 Aug 2015 00:00:00 GMT;path=/home;";
Если на нашем сайте есть несколько доменов и мы хотим установить куки непосредственно для определенного домена, тогда можно использовать параметр domain
. Например, у нас на сайте есть поддомен blog.mysite.com
. Параметр path=/
указывает, что куки будут доступны для всех директорий и путей поддомена blog.mysite.com
:
document.cookie = "login=tom32;expires=Mon, 31 Aug 2015 00:00:00 GMT;path=/;domain=blog.mysite.com;";
Последний параметр - secure задает использование SSL
и подходит для сайтов, использующих протокол https
. Если значение этого параметра равно true
, то куки будут использоваться только при установке защищенного соединения ssl
. По умолчанию данный параметр равен false
:
document.cookie = "login=tom32;expires=Mon, 31 Aug 2015 00:00:00 GMT;path=/;domain=blog.mysite.com;secure=true;";
Получение куки
Для простейшего извлечения куки из браузера достаточно обратиться к свойству document.cookie
:
var expire = new Date();
expire.setHours(expire.getHours() + 4);
document.cookie = "city=Berlin;expires="+expire.toUTCString()+";";
document.cookie = "country=Germany;expires="+expire.toUTCString()+";";
document.cookie = "login=tom32;";
document.write(document.cookie);
Здесь были установлены три куки, и браузер выведет нам все эти куки. Извлеченные куки не включают параметры expires
, path
, domain
, secure
. Кроме того, сами куки разделяются точкой с запятой, поэтому нужно еще провести некоторые преобразования, чтобы получить их имя и значение:
var cookies = document.cookie.split(";");
for(var i=0; i ");
document.write("Значение: " + value + "
");
}