Отправка статей. Подводные камни использования сессий в PHP

Сессии в PHP представляют из себя механизм сохранения на стороне сервера информации о компьютере клиента. На самом деле сессии в PHP - это не такая сложная тема, но для её понимания нужно знать принцип работы cookie в PHP . Так что, если вы не знаете как работают cookie в PHP, то сначала читайте соответствующую статью, а потом уже возвращайтесь сюда.

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

Сессии в PHP очень похожи на механизм cookie, те же самые пары ключ => значение, только они хранятся на стороне сервера.

Функция session_start()

Сеанс нам нужно начать, для этого существует функция session_start() . Эта функция стартует сеанс, или сессию, как угодно можно назвать это.

Функция session_start() желательно вызывать в самом начале страницы, но в моих примерах я этого не делаю.

Массив $_SESSION

Сессии - это группы переменных, которые хранятся на сервере, но относятся к одному уникальному посетителю. Повторю, это ключевой момент: сессии хранятся на сервере .

Для того, чтобы обеспечить взаимодействие каждого посетителя с его данными из его сессии используется файл cookie, команду создать который PHP даёт сам, вам об это беспокоится не нужно. Этот cookie имеет значение только для сервера и не может быть использован для получения данных о пользователе.

На сервере данные сессии хранятся в текстовом файле и они доступны в программе PHP в массиве $_SESSION . Чтобы сохранить переменную в сессии нужно присвоить ей значение в этом массиве.

Давайте наконец начнём использовать примеры. Всё очень просто.

Сессии в PHP

Теперь попробуем получить значение из массива $_SESSION в другом примере.

Сессии в PHP

Обратите внимание, если во втором примере мы удалим функцию session_start() то у нас не будет доступа к данным массива $_SESSION .

Функция session_id()

После того, как сессия создана, вы автоматически получаете доступ к уникальномы идентификатору сессии при помощи функции session_id() . Эта функция позволяет как задавать, так и получать значение идентификатора сессии.

Сессии в PHP

Можете посмотреть в панели инструментов для разработчиков вашего браузера (в Chrome для этого нажмите Ctrl + Shift + I, потом Resources, и там найдёте cookie), этот домен положил вашему браузеру cookie с именем PHPSESSID и примерно таким значением: "7g5df9rkd1hhvr33lq1k6c72p7".

Именно по значению PHPSESSID сервер будет определять ваш браузер и работать с соответствующим набором переменных, которые будут доступны скрипту через массив $_SESSION, как уже писалось ранее.

Функция session_name()

Если функции session_id() позволяет получать значение идентификатора сессии, функция session_name() позволяет узнать имя сессии.

Сессии в PHP

Ещё раз про функцию session_start()

Теперь мы знаем больше про мешанизм работы сессий в PHP и нужно ещё раз вернуться к функции session_start() . Эта функция инициализирует механизм сессий для текущего пользователя. Как именно это происходит:

  • Если пользователь запустил сайт впервые, то session_start() устанавливает cookie у клиента и создаёт временное хранилище на сервере, связанное с идентификатором пользователя.
  • Определяет хранилище, связанное с переданным текущим идентификатором.
  • Если в хранилище на сервере есть данные, они помещаются в массив $_SESSION.
  • Если register_globals из файла php.ini равен On, то все элементы массива $_SESSION превращаются в глобальные переменные.
Пример использования сессии

Сейчас мы рассмотрим пример, который позволит провести небольшие эксперименты с сессиями.

Сессии в PHP Счётчик

В текущей сессии вы открыли страницу раз.

Открыть пример в

With the objective now clear, I’ll walk you through the code for accesscontrol.php . Begin by including your two handy include files: