русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Чтение cookies


Дата добавления: 2015-07-09; просмотров: 1022; Нарушение авторских прав


 

Когда свойство cookie используется в JavaScript_выражении, возвращаемое им значение содержит все cookie_файлы, относящиеся к текущему документу. Эта строка представляет собой список пар имя–значение, разделенных точками с запя_ той, где имя – это имя cookie_файла, а значение – его строковое значение. Это зна_ чение не включает каких_либо атрибутов, которые могли быть установлены для cookie. Для получения значения cookie с определенным именем могут использо_ ваться методы String.indexOf() и String.substring(), а для разбиения строки cook_ ie_файла на отдельные составляющие – метод String.split().

 

После извлечения значений cookie_файла из свойства cookie их требуется интер_ претировать, основываясь на том формате или кодировке, которые были указа_ ны создателем cookie. Например, в одном cookie может храниться несколько единиц информации в полях, разделенных двоеточиями. В этом случае придется для извлечения различных фрагментов информации обратиться к соответствую_ щим строковым методам. Не забудьте вызвать функцию decodeURIComponent() для значения cookie, если оно было закодировано функцией encodeURIComponent().

 

Следующий фрагмент демонстрирует, как выполняется чтение свойства cookie, как из него извлекается отдельное значение и как потом можно использовать это значение:


// Прочитать свойство cookie. В результате будут получены все cookies данного документа.


 

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

 

var allcookies = document.cookie;

 

// Отыскать начало cookie_файла с именем "version" var pos = allcookies.indexOf("version=");

 

// Если cookie с данным именем найден, извлечь и использовать его значение if (pos != _1) {

var start = pos + 8; // Начало значения cookie
var end = allcookies.indexOf(";", start); // Конец значения cookie
if (end == _1) end = allcookies.length;    
var value = allcookies.substring(start, end); // Извлекаем значение
value = decodeURIComponent (value); // Декодируем его
         

 



// Теперь, получив значение cookie_файла, мы можем его использовать.

// В данном случае значение было установлено равным дате изменения

// документа, поэтому мы можем использовать это значение, чтобы узнать,

 

// был ли документ изменен с момента последнего посещения пользователем. if (value != document.lastModified)

 

alert("Документ был изменен с момента вашего последнего посещения");

}

 

Обратите внимание: строка, полученная при чтении значения свойства cookie, не содержит какой_либо информации о различных атрибутах cookie_файла. Свойство cookie позволяет установить эти атрибуты, но не дает возможности про_ читать их.

 

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

 

Дискуссия о cookies завершается примером 19.2, где определяется вспомога_ тельный класс, предназначенный для работы с cookies. Конструктор Cookie() чи_ тает значение cookie с заданным именем. Метод store() записывает данные в этот cookie, при этом устанавливаются значения атрибутов, определяющих срок жизни, путь и домен, а метод remove() удаляет cookie, записывая значение 0 в ат_ рибут max_age.

 

Класс Cookie, определяемый в этом примере, сохраняет имена и значения не_ скольких переменных состояния в единственном cookie. Чтобы записать данные в cookie, достаточно просто установить значения свойств объекта Cookie. Когда вызывается метод store(), имена и значения свойств, добавленные к объекту, становятся значением сохраняемого cookie_файла. Аналогично при создании но_ вого объекта Cookie конструктор Cookie() ищет существующий cookie с заданным именем, и если находит, его значение интерпретируется как набор пар имя–зна_ чение, после чего создаются соответствующие свойства нового объекта Cookie.

 

Чтобы помочь разобраться с примером 19.2, сначала рассмотрим пример 19.1, ко_ торый представляет собой простую веб_страницу, использующую класс Cookie.

 

Пример 19.1. Порядок использования класса Cookie

 

<script src="Cookie.js"></script><!__ подключить класс Cookie __> <script>

// Создать cookie, который будет использоваться для сохранения

// информации о состоянии данной веб_страницы.

var cookie = new Cookie("vistordata");


 

478Глава 19. Cookies и механизм сохранения данных на стороне клиента

// Сначала попытаться прочитать данные, хранящиеся в cookie.

// Если он еще не существует (или не содержит требуемые данные),

// запросить данные у пользователя

if (!cookie.name || !cookie.color) {

 

cookie.name = prompt("Введите ваше имя:", ""); cookie.color = prompt("Какой цвет вы предпочитаете:", "");

 

}

 

// Запомнить число посещений страницы пользователем if (!cookie.visits) cookie.visits = 1;

 

else cookie.visits++;

 

// Сохранить данные в cookie, куда включается счетчик числа посещений.

// Определить срок жизни cookie в 10 дней. Поскольку атрибут path

// не определяется, cookie будет доступен всем веб_страницам того же

// каталога и вложенных каталогов. Поэтому необходимо гарантировать,

 

// что имя cookie "visitordata" будет уникальным для всех этих страниц. cookie.store(10);

 

// Теперь можно воспользоваться данными, полученными из cookie

// (или от пользователя), чтобы приветствовать пользователя по имени,

 

// подсветив приветствие цветом, который предпочитает пользователь. document.write('<h1 style="color:' + cookie.color + '">' +

 

'Добро пожаловать, ' + cookie.name + '!' + '</h1>' + '<p>Вы посетили нас ' + cookie.visits + ' раз.' +

 

'<button onclick="window.cookie.remove();">Забыть обо мне </button>'); </script>

 

Собственно определение класса Cookie приводится в примере 19.2.

 

Пример 19.2. Вспомогательный класс Cookie

/**

* Это функция_конструктор Cookie().

 

*

* Данный конструктор отыскивает cookie с заданным именем для текущего документа.

* Если cookie существует, его значение интерпретируется как набор пар имя–значение,

* после чего эти значения сохраняются в виде свойств вновь созданного объекта.

*

* Чтобы сохранить в cookie новые данные, достаточно просто установить

* значение свойства объекта Cookie. Избегайте использования свойств

* с именами "store" и "remove", поскольку эти имена зарезервированы для методов объекта.

* Чтобы сохранить данные cookie в локальном хранилище веб_броузера,

* следует вызвать метод store().

* Чтобы удалить данные cookie из хранилища броузера, нужно вызвать метод remove().

*

* Статический метод Cookie.enabled() возвращает значение true,

* если использование cookies разрешено в броузере, в противном случае

* возвращается значение false.

*/

function Cookie(name) {

this.$name = name; // Запомнить имя данного cookie

 

// Прежде всего необходимо получить список всех cookies,

 

// принадлежащих этому документу.

// Для этого следует прочесть содержимое свойства Document.cookie.


 

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

 

// Если ни одного cookie не найдено, ничего не предпринимать. var allcookies = document.cookie;

 

if (allcookies == "") return;

 

// Разбить строку на отдельные cookies, а затем выполнить

 

// цикл по всем полученным строкам в поисках требуемого имени. var cookies = allcookies.split(';');

 

var cookie = null;

 

for(var i = 0; i < cookies.length; i++) {

// Начинается ли текущая строка cookie с искомого имени?

 

if (cookies[i].substring(0, name.length+1) == (name + "=")) { cookie = cookies[i];

break;

}

}

 

// Если cookie с требуемым именем не найден, вернуть управление if (cookie == null) return;

 

// Значение cookie находится вслед за знаком равенства var cookieval = cookie.substring(name.length+1);

 

// После того как значение именованного cookie_файла получено,

// необходимо разбить его на отдельные пары имя–значение переменных

 

// состояния. Пары имя–значение отделяются друг от друга символом

// амперсанда, а имя от значения внутри пары отделяется двоеточиями.

 

// Для интерпретации значения cookie_файла используется метод split().

var a = cookieval.split('&'); // Превратить в массив пар имя–значение
for(var i=0; i < a.length; i++) // Разбить каждую пару в массиве
a[i] = a[i].split(':');      

 

// Теперь, после того как закончена интерпретация значения cookie,

// необходимо определить свойства объекта Cookie и установить их значения.

// Обратите внимание: значения свойств необходимо декодировать,

 

// потому что метод store() кодирует их.

 

for(var i = 0; i < a.length; i++) { this[a[i][0]] = decodeURIComponent(a[i][1]);

}

}

 

/**

* Данная функция _ метод store() объекта Cookie.

*

* Аргументы:

 

*

* daysToLive: срок жизни cookie_файла в сутках. Если установить значение

* этого аргумента равным нулю, cookie будет удален. Если установить

 

* значение null или опустить этот аргумент, срок жизни cookie будет

* ограничен продолжительностью сеанса и сам cookie не будет сохранен

 

* броузером по завершении работы. Этот аргумент используется

* для установки значения атрибута max_age в cookie_файле.

 

* path: значение атрибута path в cookie

* domain: значение атрибута domain в cookie

 

* secure: если передается значение true, устанавливается

* атрибут secure в cookie_файле


*/


 

480 Глава 19. Cookies и механизм сохранения данных на стороне клиента

Cookie.prototype.store = function(daysToLive, path, domain, secure) {

// Сначала нужно обойти в цикле свойства объекта Cookie и объединить

 

// их в виде значения cookie_файла. Поскольку символы знака равенства

// и точки с запятой используются для нужд оформления cookies,

 

// для отделения друг от друга переменных состояния, составляющих

// значение cookie_файла, используются символы амперсанда,

 

// а для отделения имен и значений внутри пар _ двоеточия.

// Обратите внимание: значение каждого свойства необходимо

 

// кодировать на случай, если в них присутствуют знаки пунктуации

// или другие недопустимые символы.

 

var cookieval = ""; for(var prop in this) {

 

// Игнорировать методы, а также имена свойств, начинающиеся с '$' if ((prop.charAt(0) == '$') || ((typeof this[prop]) == 'function'))

continue;

if (cookieval != "") cookieval += '&';

cookieval += prop + ':' + encodeURIComponent(this[prop]);

}

 

// Теперь, когда получено значение cookie_файла, можно создать полную

// строку cookie_файла, которая включает имя и различные атрибуты,

 

// заданные при создании объекта Cookie

 

var cookie = this.$name + '=' + cookieval; if (daysToLive || daysToLive == 0) {

cookie += "; max_age=" + (daysToLive*24*60*60);

}

 

if (path) cookie += "; path=" + path;

 

if (domain) cookie += "; domain=" + domain; if (secure) cookie += "; secure";

 

// Теперь нужно сохранить cookie, установив свойство Document.cookie document.cookie = cookie;

}

 

/**

* Эта функция _ метод remove() объекта Cookie; он удаляет свойства объекта

 

* и сам cookie из локального хранилища броузера.

*

* Все аргументы этой функции являются необязательными, но чтобы удалить

* cookie, необходимо передать те же значения, которые передавались методу store().

 

*/

Cookie.prototype.remove = function(path, domain, secure) {

 

// Удалить свойства объекта Cookie for(var prop in this) {

 

if (prop.charAt(0) != '$' && typeof this[prop] != 'function') delete this[prop];

 

}

 

// Затем сохранить cookie со сроком жизни, равным 0

this.store(0, path, domain, secure);

}

 

/**

* Этот статический метод пытается определить, разрешено ли использование cookies

* в броузере. Возвращает значение true, если разрешено, и false _ в противном случае.


 

19.5. Альтернативы cookies
   

 

* Возвращаемое значение true не гарантирует, что сохранение cookies

* фактически разрешено. Временные cookies сеанса по_прежнему могут быть

* доступны, даже если этот метод возвращает значение false.

*/

Cookie.enabled = function() {

 

// Воспользоваться свойством navigator.cookieEnabled, если оно определено в броузере if (navigator.cookieEnabled != undefined) return navigator.cookieEnabled;

 

// Если значение уже было помещено в кэш, использовать это значение if (Cookie.enabled.cache != undefined) return Cookie.enabled.cache;

 

// Иначе создать тестовый cookie с некоторым временем жизни document.cookie = "testcookie=test; max_age=10000"; // Установить cookie

 

// Теперь проверить _ был ли сохранен cookie_файл

var cookies = document.cookie;

 

if (cookies.indexOf("testcookie=test") == _1) { // Cookie не был сохранен

return Cookie.enabled.cache = false;

}

else {

 

// Cookie был сохранен, поэтому его нужно удалить перед выходом document.cookie = "testcookie=test; max_age=0"; // Удалить cookie return Cookie.enabled.cache = true;

}

}

 



<== предыдущая лекция | следующая лекция ==>
Сохранение cookie | Механизм сохранения userData в IE


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.319 сек.