Главная > Web-разработка, Программирование > Работа с cookie на JavaScript

Работа с 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);
}
  1. Людмила
    24 Январь 2010 в 09:52 | #1

    Возможно ли, на примере использования Ваших программных кодов в html-файле, продемонстрировать чтение (запись) информации из куки? Если да, такой пример здесь, по-моему, был бы очень кстати!

    А если пользователи в Windows работают в нескольких профилях, информацию из куки
    какого профиля выдаст Ваш код?

  2. 25 Январь 2010 в 00:53 | #2

    А если пользователи в Windows работают в нескольких профилях, информацию из куки
    какого профиля выдаст Ваш код?

    Текущего, разумеется. Функция получит куки, к которым может получить доступ сайт. Ничего экстраординарного.

    Насчет примера я подумаю, спасибо.

  3. 12 Май 2010 в 15:42 | #3

    Кто нить крафтил Ы пухи? А то я уже 3 раза не скрафтил арку:)
    . Собираюсь посещать чаще.