Сессии в PHP

сессии в PHP

От автора: В этой статье мы поговорим о сессиях в PHP. Т.к. протокол HTTP не поддерживает сохранение данных между двумя разными транзакциями, были придуманы сессии.

Это очень упрощает работу, как программистам, так и пользователям. Например, сессии используются после авторизации пользователя на сайте: держат в памяти сервера данные о том, что пользователь был авторизован, и что теперь ему можно дать некоторые права администрирования или использования сайта (комментирование, просмотр закрытых для гостей страниц или же написание-редактирование-удаление новостей на сайте, etc.).

Сессии в PHP используются там, где нужно удержать данные о пользователе между транзакциями. То есть, каждый новый запрос выполняется как новый, без всякой связи с предыдущим, и вот как раз сессия играет роль недостающего звена, которое бы связало эти два запроса.

Так же сессии играют некую роль секьюрити. Как это понимать и что это за трактование? А понять просто, это банальная защита интерактивных частей сайта от нежелательной информации (то есть спама).

Перед изучением урока, я рекомендую скачать исходник себе на компьютер!

Как работают сессии PHP?

Первым делом идентифицируется браузер. Ему выдается уникальный идентификатор, который будет передаваться при каждом запросе.

Идентификатор – это обычная переменная с неким значением. По умолчанию её имя PHPSESSID.

И цель PHP заключается в том, чтобы передать (двумя способами) эту переменную браузеру, чтобы тот, в свою очередь, вернул её со следующим запросом.

Грубо говоря, на сервере создается файл со всеми переменными для созданной сессии (+устанавливается период жизни сессии). И при открытии сессии в каком-то PHP файле, то сразу же идет запрос о получении id с cookies (см. выше — PHPSESSID), если нет таковой cookie с именем PHPSESSID , то создается новая сессия. Ну а если есть PHPSESSID, то с сервера загружается все связанное с предыдущей сессией. (Например, зарегистрированные переменные сессии).

Способы передачи значение переменной PHPSESSID

Через Cookies

Через URL

Кратко о способах

В браузер записывается cookie с именем PHPSESSID, естественно, если пользователь разрешил записывать их у себя в браузере. Подробнее о cookies можно почитать здесь, на этом сайте.

Через URL – PHP дописывает к каждой ссылке передачу id сессии (как для меня, это не очень удобно).

Итог: Кроме разрешения пользователя на использование cookie при передаче id сессии, можно так же задавать разрешение для PHP в файле php.ini для таких вот строк:

session.use_cookies = (1 – разрешить cookies, 0 — запретить)

session.use_trans_sid = (1 – разрешить передачу id сессии через url, 0 — запретить)

А вот и скриншот того, как должен выглядеть cookie PHPSESSID в браузере

сессии в PHP

Комментарий к скриншоту: как вы видите, я имею cookie PHPSESSID для домена sessions.gromitsu. Как я это получил? Все просто. Я создал файл index.php в корне домена sessions.gromitsu и открыл-закрыл в нем сессию.

Установка (открытие) сессии PHP

Открытие сессии PHP производится при помощи функции session_start(), которая (ВНИМАНИЕ!) вызывается в самом начале php файла. Иначе вылезет ошибка (см. ниже).

Эта функция проверяет, существует ли PHPSESSID (или в cookies, или в ссылке (метод GET или POST)). Если да, загружает зарегистрированные переменные сессии, если нет, то создает новую сессию.

Регистрация переменных и удаление сессии

Регистрация переменных сессии.

Существует суперглобальный массив $_SESSION, который содержит в себе все сохраненные данные на протяжении всей сессии. Оперировать этим суперглобальным массивом так же просто, как и с простым.

Вывод определенных данных с $_SESSION

Ещё добавлю, что регистрировать переменные можно, как и массивы. О чем я? Смотрите ниже.

сессии в PHP

Закрытие сессии

Закрытие сессии производится, как вы уже видели, при помощи функций session_unset() (освобождение всех переменных сессии от значений) и session_destroy() (закрытие сессии).

Разработаем простой скрипт инициализации имени пользователя на одной странице, удаление сессии и вывода приветствия с именем этого пользователя на другой странице.

pageone.php

сессии в PHP

pagetwo.php

сессии в PHP

Ну и страница, до которой данные сессии не сохранились. Сценарий такой же как и в pagetwo.php

pagethree.php

сессии в PHP

Напоследок поговорим о ЕРРОРАХ, которые могут возникнуть в процессе обучения.

Warning: Cannot send session cookie — headers already sent

Warning: Cannot send session cache limiter — headers already sent

Эти ERRORS говорят о том, что ещё до использования функции session_start() был передан хоть один HTTP заголовок. Что это? При общении сервера и браузера сначала идет запрос на сервер, откуда потом сначала возвращается HTTP заголовок, а потом вся информация, которую вы запрашивали. Так вот, в PHP для удобства придумали так, чтобы функции header(), set_cookie(), session_start() передавали сами HTTP заголовки. И вот, неопытный программист, ещё до выполнения одной из выше написанных функций, имел неосторожность поставить лишний символ (пробел, цифру, букву). Так вот, до функций header(), set_cookie(), session_start() не должно стоять никакого символа. Абсолютно никакого! Тогда все будет работать на УРА!

На этом, урок по работе с сессиями в PHP, окончен. Буду рад Вашим комментариям и вопросам.

С уважением, Влад Паук.

киберсант-вебмастер

Автор: Влад Паук

Редакция: Рог Виктор и Андрей Бернацкий. Команда webformyself.

E-mail: contact@webformyself.com

Проект webformyself.com — Как создать свой сайт. Основы самостоятельного сайтостроения

"Киберсант-вебмастер" — самый полный курс по сайтостроению в рунете!

P.S. Хотите опубликовать интересный тематический материал и заработать? Если ответ «Да», то жмите сюда.

Метки: ,

Похожие статьи:

Комментарии Вконтакте:

Комментарии (33)