1. Темы лекции: Работа с cookie и графикой.
Практическое задание: Работа с cookie и графикой.
Тренер: Игорь Шкулипа, к.т.н.
JavaScript. Базовый курс
Занятие 7
2. http://www.slideshare.net/IgorShkulipa 2
Cookies
Cookie - это небольшая порция текстовой информации, которую сервер
передает браузеру. Браузер будет хранить эту информацию и
передавать ее серверу с каждым запросом как часть HTTP заголовка.
Одни значения cookie могут храниться только в течение одной сессии,
они удаляются после закрытия браузера. Другие, установленные на
некоторый период времени, записываются в файл.
Сами по себе cookies не могут делать ничего, это только лишь некоторая
текстовая информация. Однако сервер может считывать
содержащуюся в cookies информацию и на основании ее анализа
совершать те или иные действия.
Например, в случае авторизованного доступа к чему либо через WWW в
cookies сохраняется login и password в течение сессии, что позволяет
пользователю не вводить их снова при запросах каждого документа,
защищенного паролем.
На использовании cookies также часто строят функции оформления
заказов в онлайновых магазинах и т.д.
3. http://www.slideshare.net/IgorShkulipa 3
document.cookie
Для чтения и записи cookie используется свойство document.cookie.
Однако, оно представляет собой не объект, а строку в специальном
формате, для удобной манипуляций с которой нужны дополнительные
функции.
Эта строка состоит из пар ключ=значение, которые перечисляются
через точку с запятой с пробелом “; “.
Значит, чтобы прочитать cookie, достаточно разбить строку по ; , и
затем найти нужный ключ. Это можно делать либо через split и работу
с массивом, либо через регулярное выражение.
4. http://www.slideshare.net/IgorShkulipa 4
Запись в document.cookie
В document.cookie можно писать. При этом запись не перезаписывает
существующие cookie, а дополняет к ним.
У cookie также есть ряд важных настроек, которые желательно указать, так как
значения по умолчанию у них неудобны.
Эти настройки указываются после пары ключ=значение, каждое — после точки с
запятой:
• path=/ - путь, внутри которого будет доступ к cookie. Если не указать, то
имеется в виду текущий путь и все пути ниже него. Как правило,
используется path=/, то есть cookie доступно со всех страниц сайта.
• domain=site.com - домен, на котором доступно cookie. Если не указать, то
текущий домен. Допустимо указывать текущий домен site.com и его
поддомены, например forum.site.com.
• expires=Tue, 19 Jan 2038 03:14:07 GMT - дата истечения куки в формате
GMT. Получить нужную дату можно, используя объект Date. Его можно
установить в любое время, а потом вызвать toUTCString(). Если дату не
указать, то cookie будет считаться «сессионным». Такое cookie удаляется
при закрытии браузера. Если дата в прошлом, то cookie будет удален.
• secure - cookie можно передавать только по HTTPS.
5. http://www.slideshare.net/IgorShkulipa 5
Полезные функции для работы с cookie
В JavaScript нет способа просто работать с cookie без дополнительных
функций.
Поэтому следующие функции или их аналоги просто необходимы:
• function getCookie(name)
• function setCookie(name, value, expdays)
• function deleteCookie(name)
6. http://www.slideshare.net/IgorShkulipa 6
function getCookie
// возвращает cookie
function getCookie(name) {
var i, x, y, ARRcookies = document.cookie.split(";");
for (i = 0; i < ARRcookies.length; i++) {
x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
x = x.replace(/^s+|s+$/g, "");
if (x == name) {
return unescape(y);
}
}
}
7. http://www.slideshare.net/IgorShkulipa 7
function setCookie
// уcтанавливает cookie
function setCookie(name, value, exdays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value = escape(value) + ((exdays == null) ? "" :
"; expires=" + exdate.toUTCString());
document.cookie = name + "=" + c_value;
}
10. http://www.slideshare.net/IgorShkulipa 10
Сторонние cookie
При работе с cookie есть важная тонкость, которая касается внешних
ресурсов.
Теоретически, любой ресурс, который загружает браузер, может
поставить cookie.
Cookie, которые не принадлежат основной странице, называются
«сторонними» (3rd party) cookies. Не все браузеры их разрешают.
Как правило, в настройках браузера можно поставить «Блокировать
данные и файлы cookie сторонних сайтов».
Цель этого запрета — защитить посетителей от слежки со стороны
рекламодателей, которые вместе с картинкой-баннером присылают и
куки, таким образом помечая посетителей.
11. http://www.slideshare.net/IgorShkulipa 11
Ограничения cookie
На Cookie наложены ограничения:
• Имя и значение вместе не должны превышать 4кб.
• Общее количество cookie на домен ограничено 30-50, в
зависимости от браузера.
• Разные домены 2го уровня полностью изолированы. Но в пределах
доменов 3го уровня куки можно ставить свободно с указанием
domain.
• Сервер может поставить cookie с дополнительным флагом
HttpOnly. Cookie с таким параметром передаётся только в
заголовках, оно никак не доступно из JavaScript.
Иногда посетители отключают cookie. Отловить это можно проверкой
свойства navigator.cookieEnabled
13. http://www.slideshare.net/IgorShkulipa 13
sessionStorage
Этот метод поддерживается Firefox начиная со второй версии. Это
глобальный обьект, который хранится в текущей сессии документа и
хранится пока документ открыт, перегружается или
восстанавливается, но открытие нового окна или вкладки с тем же
адресом породит новую сессию.
Пример:
sessionStorage.text = «Hello, World!»;
alert(sessionStorage.text);
Недостатком такого подхода является то что он не может
распространяться на другие страницы либо окна, а работает
только в пределе своей сессии.
14. http://www.slideshare.net/IgorShkulipa 14
globalStorage
В связи с тем что HTML5 пока еще развивается, в Firefox присутствует
глобальный объект globalStorage, который позволяет хранить
данные в браузере в течении долгого промежутка времени не
привязываясь к сессии, что позволяет пользоваться и манипулировать
сохраненными данными при открытия нового окна, вкладки,
закрытия/открытия браузера. Привязка хранилища такого рода
осуществляется по домену.
Пример:
// Инициализируем хранилище
storage = globalStorage[“somedomain.com”];
// Записываем значение
storage[“hello”] = “Hello, World!”;
// Выводим значение
alert(storage[“hello”]);
// При необходимости удаляем
delete storage[“hello”];
Такой подход дает возможность сохранить до 5 мегабайт информации на
клиенте в определенном домене, и использовать хранилище в
пределах домена и его субдоменов.
16. http://www.slideshare.net/IgorShkulipa 16
Работа с графикой
Тег canvas - это элемент HTML 5, который предназначен для создания
растрового изображения при помощи JavaScript.
<canvas height=‘250' width=‘250' id='example'></canvas>
17. http://www.slideshare.net/IgorShkulipa 17
Элементы работы с canvas
• Прямоугольники. Самой элементарной фигурой которую можно рисовать
является прямоугольник. Предусмотрено три функции для отрисовки
прямоугольников.
• strokeRect(x, y, ширина, высота) - рисует прямоугольник
• fillRect(x, y, ширина, высота) - рисует закрашенный прямоугольник
• clearRect(x, y, ширина, высота) - очищает область размером с
прямоугольник заданного размера
• Линии и дуги. Рисование фигур составленных из линий выполняется
последовательно в несколько шагов: beginPath(); closePath(); stroke();
fill();
• beginPath используется что бы начать серию действий описывающих
отрисовку фигуры. Каждый новый вызов этого метода сбрасывает все
действия предыдущего и начинает рисовать заново.
• closePath является не обязательным действием и по сути оно пытается
завершить рисование проведя линию от текущей позиции к позиции с
которой начали рисовать.
• Завершающий шаг это вызовом метода stroke или fill. Первый обводит
фигуру линиями, а второй заливает фигуру сплошным цветом.
18. http://www.slideshare.net/IgorShkulipa 18
Элементы работы с canvas
• Кривые Бернштейна-Безье
quadraticCurveTo(Px, Py, x, y)
bezierCurveTo(P1x, P1y, P2x, P2y, x, y)
x и y это точки в которые необходимо перейти, а координаты P(Px,
Py) в квадратичной кривой это дополнительные точки которые
используются для построения кривой. В кубической кривой
соответственно две дополнительные точки.
20. http://www.slideshare.net/IgorShkulipa 20
SVG.js
SVG (от англ. Scalable Vector Graphics — масштабируемая векторная
графика) — язык разметки масштабируемой векторной графики,
созданный Консорциумом Всемирной паутины (W3C) и входящий в
подмножество расширяемого языка разметки XML, предназначен для
описания двумерной векторной и смешанной векторно-растровой
графики в формате XML.
SVG.js - легковесная библиотека для управления и анимации SVG.
• Анимация размеров, позиции, трансформации (translation, rotation,
skew, scale, matrix), цвета
• Masking и Clipping элементов
• Модульная структура, простота написания расширений
• Text paths (с поддержкой анимации)
• Группировка элементов
• Динамичные градиенты
• События
• Понятная документация
https://github.com/wout/svg.js