Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Пример работы с cookie

Что такое cookies и как с ними работать | Пример 3. Функция установки значения cookie | Cookies | Простой пример использования | Вы были здесь 1 раз(а). | Фиксация повторных посещений страницы | Записная книжка Cookies Notepad |


Читайте также:
  1. Cookies
  2. Cookies и хранение состояния
  3. I. Задания для самостоятельной работы
  4. I. ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТЫ
  5. II. Завершение работы с Электронным дневником.
  6. II. Организация и порядок работы комиссии по трудовым спорам
  7. II. Организация и порядок работы комиссии по трудовым спорам

Пример 16.1 объединяет все аспекты cookie, которые мы до сих пор обсуждали. Сначала пример определяет класс Cookie. При создании объекта Cookie вы указываете объект Document, имя cookie и (необязательно) время окончания действия, путь, домен и логическое значение, указывающее, должен ли cookie быть защищен. После создания объекта Cookie можно установить в этом объекте произвольные строковые свойства. Значения этих свойств – это значения, которые будут храниться в cookie. Класс Cookie определяет три метода. Метод store() обходит в цикле все определенные пользователем свойства объекта Cookie и конкатенирует их имена и значения в одну строку, выступает в качестве значения cookie. Метод load() объекта Cookie читает свойство cookie объекта Document для получения значений всех cookie данного документа. Он ищет в этой строке значение cookie с указанным именем и затем разбивает это значение на отдельные имена и
значения, которые хранятся в качестве свойств объекта Cookie. И наконец, метод remove() объекта Cookie удаляет указанный cookie из документа.

За определением класса Cookie в примере 16.1 следует полезный и изящный способ использования cookie. Код этого примера несколько сложен, но стоит тщательного изучения. Можно начать с тестовой программы в конце примера, иллюстрирующей типичное применение класса Cookie.

Пример 16.1. Вспомогательный класс для работы с cookie

<script language="JavaScript1.1">
// Функция-конструктор: создает объект Cookie для указанного документа с
// указанным именем и необязательными атрибутами.
// Аргументы:
// document: Объект Document, для которого сохраняется cookie. Обязательный.
// name: Строка, задающая имя cookie. Обязательный.
// hours: Необязательное число, задающее количество часов, по
// прошествии которых cookie должен закончить свое действие.
// path: Необязательная строка, задающая атрибут path для cookie.
// domain: Необязательная строка, задающая атрибут domain для cookie.
// secure: Необязательное логическое значение, которое, будучи равно
// true, требует защиты при передаче cookie.
//
function Cookie(document, name, hours, path, domain, secure)
{
// Все предопределенные свойства этого объекта начинаются с символа '$', чтобы
// отличить их от других свойств, являющихся значениями, предназначенными
// для хранения в cookie.
this.$document = document;this.$name = name;
if (hours)
this.$expiration = new Date((new Date()).getTime() + hours*3600000);
else this.$expiration = null;
if (path) this.$path = path; else this.$path = null;
if (domain) this.$domain = domain; else this.$domain = null;
if (secure) this.$secure = true; else this.$secure = false;
}
// Эта функция является методом store() объекта Cookie.
Cookie.prototype.store = function () {
// Сначала выполняем цикл по свойствам объекта Сookie и собираем
// значение cookie. Так как cookie используют знаки равенства и
// точки с запятой в качестве разделителей, для индивидуальных
// переменных состояния, хранящихся в одном значении cookie, мы
// будем использовать двоеточния и амперсанды. Обратите внимание,
// что мы кодируем каждую переменную состояния с помощью функции
// escape() на тот случай, если она содержит знаки пунктуации или
// другие недопустимые символы.
var cookieval = "";
for(var prop in this) {
// Игнорирует свойства с именами, начинающимися с '$', а также методы
if ((prop.charAt(0) == '$') || ((typeof this[prop]) == 'function'))
continue;
if (cookieval!= "") cookieval += '&';
cookieval += prop + ':' + escape(this[prop]);
}
// Теперь, когда у нас есть значение cookie, собираем вместе
// полную строку cookie, включающую имя и различные атрибуты, указанные
// при создании объекта Cookie.
var cookie = this.$name + '=' + cookieval;
if (this.$expiration)
cookie += '; expires=' + this.$expiration.toGMTString();
if (this.$path) cookie += '; path=' + this.$path;
if (this.$domain) cookie += '; domain=' + this.$domain;
if (this.$secure) cookie += '; secure';
// Теперь сохраняем cookie, устанавливая «магическое» свойство
// Document.cookie.
this.$document.cookie = cookie;
}
// Эта функция является методом load() объекта Cookie
Cookie.prototype.load = function() {
// Сначала получаем список всех cookie, относящихся к этому документу.
// Мы делаем это путем чтения «магического» свойства Document.cookie.
var allcookies = this.$document.cookie;
if (allcookies == "") return false;
// Теперь извлекаем из этого списка только cookie с указанным именем.var start = allcookies.indexOf(this.$name + '=');
if (start == -1) return false; // Для этой страницы cookie не определены
start += this.$name.length + 1; // Пропускаем имя и знак равенства
var end = allcookies.indexOf(';', start);
if (end == -1) end = allcookies.length;
var cookieval = allcookies.substring(start, end);
// После извлечения значения указанного cookie мы должны разбить
// это значение на несколько отдельных переменных состояния.
// Пары имя/значение отделяются друг от друга амперсандами, а
// отдельные имена отделяются от значений двоеточиями. Для всех
// этих операций мы используем метод split().
var a = cookieval.split('&'); // Разбиваем на элементы массива пар “имя/значение”
for(var i=0; i < a.length; i++) // Разбиваем каждую пару на два элемента массива
a[i] = a[i].split(':');
// После разбора значения cookie устанавливаем все имена и значения
// переменных состояния в объекте в данном объекте Cookie. Обратите
// внимание на использование функции unescape() для значения свойства;
// она нужна потому, что при сохранении значений мы вызывали escape().
for(var i = 0; i < a.length; i++) {
this[a[i][0]] = unescape(a[i]);
}
// Все готово, поэтому возвращаем код успешного завершения
return true;
}
// Эта функция является методом remove() объекта Cookie
Cookie.prototype.remove = function() {
var cookie;
cookie = this.$name + '=';
if (this.$path) cookie += '; path=' + this.$path;
if (this.$domain) cookie += '; domain=' + this.$domain;
cookie += '; expires=Fri, 02-Jan-1970 00:00:00 GMT';
this.$document.cookie = cookie;
}
//===================================================================
// Приведенный выше код является определением класса Cookie.
// Следующий код – это пример применения этого класса.
//===================================================================
// Создаем cookie, который мы будем использовать для сохранения
// состояния этой веб-страницы. Так как мы используем путь по умолчанию,
// этот cookie будет использоваться для всех веб-страниц, расположенных в
// том же каталоге или “ниже” его. Следовательно, cookie должен иметь
// имя, уникальное среди всех этих страниц. Обратите внимание, что мы
// устанавливаем дату окончания действия через десять дней после текущего// момента.
var visitordata = new Cookie(document, "name_color_count_state", 240);
// Сначала пытаемся прочитать данные, хранящиеся в cookie. Если cookie
// не определен или не содержит нужных нам данных, запрашиваем данные
// у пользователя.
if (!visitordata.load() ||!visitordata.name ||!visitordata.color) {
visitordata.name = prompt("Ваше имя:", "");
visitordata.color = prompt("Ваш любимый цвет:", "");
}
// Отслеживаем, сколько раз пользователь посещал страницу:
if (visitordata.visits == null) visitordata.visits = 0;
visitordata.visits++;
// Сохраняем значения cookie, даже если они уже сохранялись, чтобы
// была установлена дата окончания действия, на 10 дней более поздняя, чем
// последний визит. Кроме того, снова сохраняем cookie, чтобы была
// сохранена обновленная переменная состояния visits.
visitordata.store();
// Теперь мы можем использовать прочитанные нами переменные состояния:
document.write('<font size="7" color="' + visitordata.color + '">' +
Добро пожаловать, ' + visitordata.name + '!' +
'</font>' +
'<p>Вы посещали страницу ' + visitordata.visits + ' раз.');
</script>
<form>
<input type="button" value="Забудьте мое имя" onclick="visitordata.remove();">
</form>

 

JavaScript и куки (cookie)

JavaScript дает возможность устанавливать и читать куки в браузере. В данном уроке мы рассмотрим как происходит работа с куками, а также сделаем простую страницу, которая будет помнить введеное имя и отображать его при каждом входе.


Дата добавления: 2015-08-27; просмотров: 43 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Cookies и хранение состояния| Сохранение куки

mybiblioteka.su - 2015-2024 год. (0.005 сек.)