что такое сессионная кука
Аутентификация пользователя на сайте. Сессии и куки
Особенности работы протокола HTTP
Как вы узнали из прошлой главы, работа с веб-сайтами в интернете происходит по протоколу HTTP.
Это замечательный и простой протокол, который действует по схеме «запрос-ответ». То есть клиент (браузер) пользователя посылает на сервер запрос, состоящий, как правило, только из заголовков, а затем получает ответ в виде заголовков ответа и тела самого документа.
В отличие от многих других протоколов, HTTP не сохраняет своего состояния. Это означает отсутствие сохранения промежуточного состояния между парами «запрос-ответ».
Иными словами, сервер не «запоминает» клиентов; каждый запрос он обрабатывает с «чистого листа».
Для сервера нет никакой разницы: запросил один пользователь страницу десять раз или десять разных пользователей по разу. Для него все запросы одинаковые.
Чем это неудобно для нас?
Часто сайты должны уметь идентифицировать своих посетителей, чтобы сохранять и показывать им позже какую-либо информацию.
Например, интернет-магазины могут сохранять историю просмотров, чтобы рекомендовать потенциальным покупателям наиболее подходящие им товары. Или агрегатор новостей мог бы предложить пользователям выбирать только интересующие их рубрики.
К счастью, протокол HTTP, а также все браузеры предоставляют возможность сохранения информации о пользователе.
Cookies
Cookies (в дальнейшем просто «куки») — небольшие фрагменты данных, которые веб-сервер отправляет браузеру.
Браузер сохраняет их у себя, а при следующем посещении веб-страницы отправляет обратно. Благодаря этому, веб-сервер сможет узнать своего «старого» посетителя, идентифицировать его.
Пример
Задача очень проста: сохранять и показывать посетителю страницы, сколько раз он посетил наш сайт. Для этого будем сохранять количество посещений в отдельной куке, увеличивая значения на единицу при каждой загрузке страницы.
Как установить куки: функция setcookie
Являясь серверным языком программирования, PHP может управлять заголовками, которые отправляет сервер, а значит может устанавливать и читать куки.
Чтобы добавить новую куку, необходимо вначале определиться со следующими критериями:
Обратите внимание, что срок жизни указывается в относительной величине. В этом примере кука будет существовать ровно 30 дней с момента установки.
Как прочитать куки
Собираем всё вместе
Теперь, научившись устанавливать и читать куки, напишем полноценный сценарий, который будет считать и выводить количество посещений страницы пользователем:
Сессии
Мы уже умеем сохранять информацию для пользователя между посещениями страницы с помощью кук. Но зачем же нам ещё сессии, и для чего они нужны?
Сессии, они же сеансы, это, по сути, просто удобная обёртка над куками. Они также позволяют хранить данные, релевантные пользователю, но с некоторыми отличиями и ограничениями:
Как устроены сессии
Благодаря существованию сессий в PHP, мы можем сохранять любые данные так же просто, как присваивать их переменным. Но, в отличие от переменных, эти данные будут сохраняться для пользователя между запросами в пределах сеанса.
Перепишем сценарий для подсчета посещений, но теперь используем сессии:
Аутентификация
Представим интернет-магазин. Все его страницы можно разделить на две половины: публичные и приватные.
К публичным относятся страницы каталога, информации о товаре, условия доставки и так далее. К приватным — корзина покупок, история заказов.
Совершенно очевидно, что корзина покупок у каждого покупателя должна быть своя, а иметь к ней доступ должен только сам владелец и никто больше.
Процедура проверки возможности доступа пользователя к определенной части сайта и называется аутентификацией.
Весь процесс аутентификации всегда состоит из нескольких шагов:
Ещё немного терминологии
Следует различать два термина: аутентификация и авторизация.
Аутентификация — проверка подлинности предоставленного пользователем идентификатора (пара логин-пароль).
Авторизация — процесс проверки и предоставления прав пользователю на выполнение определённого действия.
В примере с интернет-магазином аутентификация выполняется, когда пользователь заполняет форму входа и попадает в свой личный кабинет. Сценарий, обрабатывающий форму, лишь проверяет, что такой пользователь существует, и его пароль совпадает.
Авторизация включается в работу, когда пользователь выполняет какое-нибудь действие. Например, удаляет товар из своей корзины. Во время этого действия сценарий должен проверить принадлежность товара к корзине этого пользователя. Без такой проверки пользователь мог бы удалить товар из чужой корзины.
Логика авторизации намного сложнее, чем простая проверка совпадения почты и пароля при входе на сайт. В авторизацию могут также входить следующие понятия: группы пользователей, виды действий, ресурсы, иерархия ролей и действий. Этой теме можно посвятить отдельную главу. Мы не рассматриваем авторизацию в рамках этого учебника, потому что эта тема выходит за рамки «базовой».
Регистрация на сайте
Перед тем, как мы начнем добавлять аутентификацию на своем сайте, придётся добавить форму для регистрации нового аккаунта.
Аккаунт — это учётная запись пользователя.
Чтобы завести аккаунт, требуется пройти регистрацию — это заполнение специальной формы, где пользователь указывает свою почту, пароль, и, возможно, дополнительную информацию.
После регистрации все данные из формы сохраняются в базе данных как есть. Но хранению паролей нужно уделить особое внимание.
Хранение паролей
Пароль пользователя — это секретный набор символов, который используется в дальнейшем в ходе аутентификации. Зная пароль пользователя, злоумышленник может войти на сайт под его именем. По этой причине пароль нельзя хранить в базе в открытом виде. Ведь если информацию из БД сайта украдут, то данные всех пользователей станут скомпрометированными.
Вместо самого пароля, в базе будут храниться их отпечатки — хэши.
Что такое хеширование
Отпечаток (хэш) — это результат работы функции хэширования, которая вернёт для любого значения строку фиксированной длины.
Используя специальный математический алгоритм, такая функция умеет преобразовывать любую переданную информацию к строке фиксированной длины (например, 32 или 64 символа). Причём любому массиву информации, будь это все статьи из Википедии, или одно слово, всегда будет соответствовать уникальный отпечаток. Повторный вызов функции для одного и того же исходника всегда возвращает один и тот же хэш.
Обратная операция (получить из отпечатка оригинал) невозможна.
Возьмём простой пример. У нас есть информация, для которой мы хотим получить отпечаток. Пусть такой информацией будет следующая строка:
Результат обработки этой строки хэширующей функцией SHA-1 будет таким:
6b3cb0df50fe814dee886b4e1c747dda6ce88b37
Хэширующие функции часто используются для контроля целостности информации при передачи по сети. Например, чтобы убедиться в том, что загруженный файл не был повреждён, достаточно получить его хэш и сравнить данный хэш с опубликованным на сайте. Если в файле поменялся хоть один байт, то эти отпечатки будут совершенно разными.
Нам же функции хэширования помогут для сравнения паролей.
Реализация регистрации пользователя
Вернёмся к форме регистрации.
Выше говорилось, что вместо пароля лучше хранить его отпечаток. Для получения отпечатка существуют множество хэшируюших функций. К счастью, нам не надо разбираться в их многообразии, потому что в PHP есть стандартная функция, которая делает ровно то, что нужно.
Вот пример как из пароля получить отпечаток, пригодный для хранения в базе:
Проверка пароля при входе на сайт
Использование сессии для контроля доступа
Сессии чаще всего используются для хранения информации о залогиненном пользователе. Принцип работы здесь очень простой: внутри сценария, ответственного за обработку формы входа, открывается новая сессия, куда записывается информация о вошедшем пользователе. Такой информацией может быть ассоциативный массив со всеми значениями из соответствующей записи из БД.
Затем добавим код, проверяющий существование сессии в сценарии, которые должны быть закрыты от анонимных пользователей. Если сессия пуста, значит данный пользователь не выполнял вход на сайт, и доступа к данной странице он не имеет.
В этом случае можно вернуть код ответа 403 и показать сообщение об ошибке, либо принудительно выполнить переадресацию на главную страницу.
Выход с сайта
Разница между cookie и сессиями
Не так давно я писал статью о том, как сделать регистрацию и авторизацию пользователей на сайте. И там я написал, что при авторизации надо записать информацию об этом (логин и шифрованный пароль) в cookie, либо в сессию. Однако, возникает вопрос: «Что же выбрать: cookie или сессии?«. В этой статье я собираюсь разобрать разницу между сессиями и cookie, чтобы Вы окончательно определились с выбором.
Принципиальная разница между cookie и сессиями состоит в том, что cookie полностью хранятся в браузере пользователя (то есть на компьютере клиента), а при сессиях в cookie хранится только идентификатор сессии, а вся информация лежит на сервере в специальном уникальном файле. Именно из этого базового различия вытекают все остальные.
У Вас серьёзный сайт, на котором у людей лежат крупные суммы денег (например, как WebMoney). Ваш посетитель пришёл в какое-нибудь Интернет-кафе, авторизовался, но выйти забыл (уверен, что с каждым из Вас это происходит регулярно). Дальше приходит злоумышленник заходит на его аккаунт и забирает cookie. Дальше процесс очевиден. А если бы использовались сессии, то по умолчанию через 15 минут бездействия пользователя происходил бы автоматический выход (файл с данными сессиями бы стирался). И ничего такого бы не произошло. Более того, ввиду того, что каждая сессия имеет уникальный идентификатор, то смысл воровства идентификатора сессии (а больше ничего взять не получится) уже отсутствует. Когда злоумшыленник придёт домой, этот идентификатор ему уже не поможет.
Именно по этой причине cookie так популярны при работе с механизмом авторизации.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 3 ):
А можно ли как-нибудь сохранить в куки объект созданного мною класса?
Можно преобразовать его в строку и сохранить.
Но когда пользователь нажимает сохранить пароль в браузере а так делают многие то данные по любому в cooci браузера сохраняются.
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
Что такое куки (cookies): определение и типы
Читайте больше о типах куки и узнайте, зачем их используют в маркетинге
Куки — это текстовый файл, который передает сервер браузеру пользователя.
Содержание
Он создается на основе заполнения форм на сайтах, которые включают имя, логин, пароль и другие данные. Каждый раз, когда пользователь открывает уже посещаемую ранее страницу, его браузер отправляет этот файл серверу в виде HTTP запроса.
Для чего нужны куки?
Именно куки позволяют не вводить логин и пароль каждый раз при посещении сайта.
Зачем используют куки в маркетинге?
Для трекинга. Программисты и маркетологи используют куки, чтобы собрать информацию о пользователях для дальнейшего её анализа. Отслеживают посещаемые сайты, просматриваемые страницы, по каким ссылкам переходят, чем интересуются. В результате создают релевантную и сегментированную рекламу для каждого клиента. Таким образом, чем больше сайт размещает объявлений на разных площадких, тем больше информации о пользователях будет передано на сервер.
Недостатки куки
Мифы о куки
Многие пользователи уверены, что куки — это не просто файл, а целый код, который угрожает их компьютеру. Отслеживание информации возможно только если человек сам разрешил это или просто ходит по сайту. Вот несколько популярных заблуждений насчет кукиз.
Типы куки
Сессионные куки
Сессионные или временные куки могут существовать только в тот промежуток времени, когда пользователь находится на сайте. После того, как он закрыл окно браузера, куки удаляются.
Постоянные куки
Они удаляются либо через определенный промежуток времени, либо когда пользователь сам очистит куки. Таким образом, браузер передает их на сервер при каждом посещении сайта.
Защищенные куки
Этот тип куки передают только через шифрованное соединение HTTPS.
HTTPOnly куки
К этому типу куки нельзя обратиться через API. Это предотвращает кражу куки.
Время от времени нужно удалять куки, так как они занимают место на жестком диске и влияют на скорость работы компьютера, а также позволяют другим пользователям заходить на сайты через ваши сохраненные пароли.
Во многих браузерах вы можете отключить сбор куки, но иногда это не позволяет полноценно пользоваться сайтами.
Как почистить куки в Google Chrome?
Для удаление куки можно использовать специальные программы, например, CCleaner.
Также искали с «Куки (cookies)»
Оценка: 4 / 5 (9)
Что такое куки и сессия?
Типичные заблуждения о компьютерных вирусах
Нужно ли удалять файлы cookie
Cookie и session – что это? Как работают файлы куки и сеанса посещения (сессии)? В чем разница?
Предварительно о файлах cookie и session
HTTP — это протокол * без сохранения состояния, что означает, что каждый запрос, отправляемый клиентом на сервер, полностью независим. Сервер не может подтвердить идентификационную информацию текущего клиента, а также не может определить, является ли отправитель предыдущего запроса и отправитель этого запроса одним и тем же клиентом.
* Протокол — это система обязательных к соблюдению правил при обмене данными внутри или между компьютерами, принятых с целью совместимости программного обеспечения.
Чтобы отслеживать взаимодействие между клиентом и сервером, технология поддержки состояния HTTP-соединения стала Cookie и Session.
Что такое cookie?
Cookie (куки) — это небольшой файл или фрагмент данных, который сервер отправляет в веб-браузер пользователя.
Браузер может сохранить его и отправить обратно с последующими запросами на тот же сервер. Обычно он используется, чтобы определить, поступили ли два запроса из одного и того же браузера.
Сервер также может изменять содержимое файла cookie по мере необходимости.
Важно: файлы cookie не являются междоменными. Файлы cookie на стороне клиента управляются браузером, гарантируя, что, к примеру, Google будет использовать только файлы cookie Google, а не файлы cookie Facebook, тем самым обеспечивая конфиденциальность пользователя. Браузер определяет, может ли веб-сайт использовать файлы cookie на основе имени домена.
Что такое session?
Session (сессия или сеанс посещения)- это ещё один механизм для записи состояния сессии между сервером и клиентом, чтобы различать файлы cookie. Разница в том, что куки хранятся в клиентском браузере, а сессия хранится на сервере.
Сессия хранится на сервере, а идентификатор сессии будет храниться в файле cookie о клиенте.
Как работают файлы куки и сессии
Куки и сессия — принцип работы
Когда клиент отправляет запрос на сервер в первый раз, сервер создаёт соответствующий пакет данных сессии согласно соответствующей информации, представленной пользователем. Сервер отвечает на запрос клиента и возвращает браузеру уникальную идентификационную информацию SessionID.
Браузер сохраняет преобразованный SessionID в cookie, а cookie записывает, к какому доменному имени принадлежит SessionID.
Когда клиент посещает сервер во второй раз, запрос автоматически определяет, есть ли информация cookie под этим доменным именем.
Если это так, то информация cookie будет отправлена на сервер. Сервер получит идентификатор сессии из файла куки, а затем найдет соответствующую информацию о сессии в соответствии с идентификатором session.
Различия между куки и сессией
Безопасность
Сессия безопаснее, чем куки. Сессия хранится на стороне сервера, а файл cookie хранится на стороне клиента.
Данные о статусе, хранящиеся в браузере, опасны, и не исключено, что информация о статусе в браузере может быть искусственно изменена с целью обмана сервера. Как только это произойдет, ваша конфиденциальность может быть утрачена, что приведёт к нежелательным потерям.
Типы хранимых значений
Куки поддерживают только сохранение строковых данных. Если для них заданы другие типы данных, их необходимо преобразовать в строку.
Сессия может хранить данные любого типа.
Период действия
Cookie можно настроить на длительное хранение.
Время окончания сессии относительно короткое, и клиент перестанет быть допущенным, если сессия закончится.
Размеры хранилища
Объём данных, содержащихся в одном файле cookie, не может превышать 4 КБ, что явно недостаточно для сложных данных состояния.
Данные хранилища session выше, чем cookie. Когда посещений слишком много, будет задействовано больше ресурсов сервера.
Лекции по веб-программированию
Протокол HTTP является протоколом «без сохранения состояния». Это означает, что когда пользователь открывает сначала одну страницу сайта, а затем переходит на другую страницу этого же сайта, то основываясь только на средствах, предоставляемых протоколом HTTP невозможно установить, что оба запроса относятся к одному пользователю. Необходим механизм, при помощи которого можно было бы отслеживать информацию о пользователе в течение одного сеанса связи с Web-сайтом. В PHP такой механизм реализован при помощи сессий (session) и куки (cookies).
Сессии и куки предназначены для хранения сведений о пользователях при переходах между несколькими страницами. При использовании сессий данные сохраняются во временных файлах на сервере. Файлы с cookies хранятся на компьютере пользователя, и по запросу отсылаются браузером (browser) серверу.
Использование сессий и куки очень удобно и оправдано в таких приложениях как интернет-магазины, форумы, доски объявлений и блоги когда, во-первых, необходимо сохранять информацию о пользователях на протяжении нескольких станиц, а, во-вторых, своевременно предоставлять пользователю новую информацию.
COOKIES
Пример установки Cookies:
При использовании Cookies необходимо иметь в виду, что Cookies должны устанавливаться до первого вывода информации в браузер (например, оператором echo или выводом какой-либо функции). Поэтому желательно устанавливать Cookies в самом начале скрипта. Cookies устанавливаются с помощью определенного заголовка сервера, а если скрипт выводит что-либо, то это означает, что начинается тело документа. В результате Cookies не будут установлены и может быть выведено предупреждение. Для проверки успешности установки Cookies можно использовать такой метод:
Функция SetCookie ( ) возвращает TRUE в случае успешной установки Cookie. В случае, если Cookie установить не удается SetCookie ( ) возвратит FALSE и возможно, предупреждение (зависит от настроек PHP). Пример неудачной установки Cookie:
Cookie установить не удалось, поскольку перед посылкой заголовка Cookie мы вывели в браузер строку «Hello».
Чтение значений Cookies
Доступ к значениям осуществляется по имени установленных Cookies, например:
Пример установки Cookie и последующего его чтения:
В рассмотренном примере при первом обращении к скрипту устанавливается Cookie «test» со значением «hello». При повторном обращении к скрипту будет выведено значение Cookie «test», то есть строка «Hello».
СЕССИИ
Задача PHP отправить ее браузеру, чтобы тот вернул ее со следующим запросом. Переменную можно передать только двумя способами: в cookies или POST/GET запросом.
PHP использует оба варианта.
За это отвечают две настройки в php.ini:
Если включена только вторая, то cookies не выставляется. А происходит то, ради чего, в основном, собственно, и стоит использовать встроенный механизм сессий. После того, как скрипт выполняет свою работу, и страница полностью сформирована, PHP просматривает ее всю и дописывает к каждой ссылке и к каждой форме передачу идентификатора сессии. Это выглядит примерно так:
a href = «/index.php» > Index / a >
превращается в
a href = «/index.php?PHPSESSID=9ebca8bd62c830d3e79272b4f585ff8f» > Index / a >
а к формам добавляется скрытое поле
Для того, чтобы иметь доступ к переменным сессии на любых страницах сайта, надо написать только одну строчку в самом начале КАЖДОГО файла, в котором нам нужны сессии:
session_start ( ) ;
Например, проверка авторизации будет выглядеть примерно так:
Удаление переменных из сессии
Если в настройках PHP включена переменная register_globals=off, то достаточно написать
Если же нет, то тогда рядом с ней надо написать:
Сравнение механизмов идентификации пользователей при помощи Cookies и Session
Cookies — это просто пара имя-значение, которые сервер может оставить у клиента (браузера). Наглядно:
1. Приходит клиент, спрашивает у сервера страницу.
2. Сервер по IP определяет геолокацию клиента и в заголовках ответа может установить cookies. Например, выдав заголовок: Set-Cookie: country=russia. При следующем обращении серверу уже не надо проверять IP, он может взять готовое значение из cookies, если они разрешены у клиента.
Сессии — это механизм, который позволяет отличить одного клиента от другого и хранить связанные с ним данные.
Как правило, сессии реализуются используя cookies и идентификаторы сессий. Т.е. сервер со своей стороны создает уникальный идентификатор, например, «1a2b3c» (session_id), а клиента просит его запомнить. Обычно — при помощи cookies, говоря что-то в духе Set-Cookie: PHPSESSID=1a2b3c (где «PHPSESSID» — имя сессии). Со своей стороны сервер где-то в файле хранит различные данные, которые ему приказано связывать с этой сессией.
Если куки у пользователя отключены, то перед отдачей страницы пользователю сервер переписывает все ссылки в ней, добавляя к ним параметр «?PHPSESSID=1a2b3c». Таким образом сервер получает идентификатор сессии.
Фактически механизм Cookies хранит данные о пользователе на стороне клиента, т.е. у самого пользователя, а механизм сессий хранит у пользователя только идентификатор клиента. Сами данные, связанные с этим пользователем, хранятся на сервере.