Отправка статей. Подводные камни использования сессий в 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: