Работа с cookie на JavaScript
Довольно часто, при разработке приложений на JavaScript нужно что-то записывать или читать из cookie. И вот в чем проблема — JavaScript и DOM HTML не имеют вменяемых методов для работы с cookies! В этой статье я покажу пусть и очень простые, но так необходимые PHP-like функции для работы с куками на JavaScript.
Функции сделаны похожими на PHP-шные. В принципе, все они давно описаны, однако до сих пор работа с cookies в JavaScript может поставить в затруднительное положение начинающих JavaScript-программистов.
Получение cookie
Функция принимает один параметр — имя переменной, которую нужно считать из куки. Возвращает значение переменной, или null, если cookie с таким именем не установлена.
В принципе, можно было бы использовать регулярные выражения вместо циклов, немного оптимизировать цикл, и функция получилась бы куда более лаконичной. Однако, тут вы можете лучше понять, что происходит при чтении переменной из куки.
/**
* Get cookie.
*
* @param String name Name of cookie variable to get.
* @return String Value of the variable we get.
*/
function getcookie(name) {
//get all variables stored in the cookie
var aCookie = document.cookie.split(';');
//search variable we need
for (var i = 0; i < aCookie.length; i++) {
//remove spaces
while(aCookie[i][0] == ' ') {
aCookie[i] = aCookie[i].substr(1);
}
//get array [name, value]
var aCrumb = aCookie[i].split('=');
//if name is the same we are looking for, then return it
if (name == aCrumb[0]) {
return unescape(aCrumb[1]);
}
}
//no variable with given name found
return null;
}
Установка cookie
Функция аналогична одноименной PHP-шной, за исключением отсутствия последнего параметра.
/**
* Set cookie with given name and value.
*
* @param String name Name of cookie variable.
* @param String value Value of variable.
* @param String expires Number of seconds cookie will be alive.
* @param String path Server path to reduce visibility scope.
* @param String domain Domain name for cookie.
* @param String secure Secure.
*/
function setcookie(name, value, expires, path, domain, secure) {
//define expires time
var today = new Date();
var expires_date = new Date(today.getTime() + (expires * 1000));
//set cookie
document.cookie =
name + '=' + escape(value) +
(expires ? ';expires=' + expires_date.toUTCString() : '') +
(path ? ';path=' + path : '' ) +
(domain ? ';domain=' + domain : '' ) +
(secure ? ';secure' : '' );
}
Удаление cookie
В принципе, для удаления cookies используется функция setcookie(), со всеми параметрами
ранее установленной cookie, но с истекшим временем жизни. Эта функция сделана лишь для сокращения записи.
/**
* Delete cookie. Use exactly the same parameters you used while cookie
* creation.
*
* @param String name Name of cookie variable.
* @param String path Server path.
* @param String domain Domain name for cookie.
*/
function deletecookie(name, path, domain) {
//make cookie expire 1 second ago
setcookie(name, '', -1, path, domain);
}
Возможно ли, на примере использования Ваших программных кодов в html-файле, продемонстрировать чтение (запись) информации из куки? Если да, такой пример здесь, по-моему, был бы очень кстати!
А если пользователи в Windows работают в нескольких профилях, информацию из куки
какого профиля выдаст Ваш код?
Текущего, разумеется. Функция получит куки, к которым может получить доступ сайт. Ничего экстраординарного.
Насчет примера я подумаю, спасибо.
Кто нить крафтил Ы пухи? А то я уже 3 раза не скрафтил арку:)
. Собираюсь посещать чаще.