Как работают сеансы PHP? (не "как они используются?")


Файлы сеансов обычно хранятся, скажем, в /tmp/ на сервере и называются sess_{session_id}. Я просматривал содержимое и не могу понять, как они на самом деле работают.

Легко получить имя переменной и содержимое из файла. Но как PHP узнает, какая сессия кому принадлежит?

Идентификатор сеанса кажется совершенно случайным, и на одном IP-адресе может быть несколько пользователей, и у каждого пользователя может быть несколько сеансов, если у них открыто более одного окна браузера.

Итак, как работает ли это?

 104
Author: Peter O., 2009-10-08

4 answers

В общей ситуации:

  • идентификатор сеанса отправляется пользователю при создании его сеанса.
  • он хранится в файле cookie (по умолчанию называется, PHPSESSID)
  • этот файл cookie отправляется браузером на сервер с каждым запросом
  • сервер (PHP) использует этот файл cookie, содержащий идентификатор сеанса, чтобы узнать, какой файл соответствует этому пользователю.

Данные в файлах сеансов представляют собой содержимое $_SESSION, сериализованное (т.Е. представленное в виде строки -- с помощью такой функции, как сериализовать) ; и не сериализуется, когда файл загружается PHP, для заполнения массива $_SESSION.


Иногда идентификатор сеанса не сохраняется в файле cookie, но также отправляется по URL-адресам, но в настоящее время это довольно редко.


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

Например, есть страница о Прохождении сеанса Идентификатор, который объясняет, как идентификатор сеанса передается со страницы на страницу, с помощью файла cookie или в URL-адресах - и какие параметры конфигурации влияют на это.

 166
Author: Pascal MARTIN, 2009-10-08 04:57:17

Как Работает Сеанс PHP

  • Сначала PHP создает 16-байтовый уникальный идентификационный номер (хранится в виде строки из 32 шестнадцатеричных символов, например a86b10aeb5cd56434f8691799b1d9360) для отдельного сеанса.

  • Файл cookie PHPSESSID передает этот уникальный идентификационный номер в браузер пользователя для сохранения этого номера.

  • На сервере создается новый файл с тем же именем и уникальным идентификационным номером с префиксом sess_ (т. е. sess_a86b10aeb5cd56434f8691799b1d9360.)

  • Браузер отправляет этот файл cookie на сервер с каждым запросом.

  • Если PHP получает этот уникальный идентификационный номер из файла cookie PHPSESSID (при каждом запросе), то PHP выполняет поиск во временном каталоге и сравнивает этот номер с именем файла. Если оба они одинаковы, то он извлекает существующий сеанс, в противном случае он создает новый сеанс для этого пользователя.

Сеанс уничтожается, когда пользователь закрывает браузер или покидает сайт. Сервер также завершает сеанс по истечении заданного периода времени сеанса. Это простые шаги механизма, которые PHP использует для обработки сеанса. Я надеюсь, что эта статья поможет вам понять, как работает PHP-СЕССИЯ.

Смотрите эту статью для получения более подробной информации. Как Работает сеанс PHP

 7
Author: Sohel Rana, 2017-04-05 03:39:50

Идентификатор сеанса действительно случайный и передается в файле cookie или в URL-адресе, в зависимости от конфигурации. Возможно, вы уже видели этот PHPSESSID=xxxx в некоторых URL-адресах, также есть файл cookie с таким именем.

 4
Author: Julien Lebosquain, 2009-10-08 04:56:32

Сеансы в PHP запускаются с помощью функции session_start(). Как и функция setcookie(), функция session_start() должна располагаться перед любым HTML-кодом, включая пустые строки, на странице. Это будет выглядеть так: <?php session_start( );?><html><head> .......и т.д Функция session_start() генерирует случайный идентификатор сеанса и сохраняет его в файле cookie на компьютере пользователя (это единственная информация о сеансе, которая фактически хранится на стороне клиента). Имя файла cookie по умолчанию - PHPSESSID, хотя это можно изменить в файлах конфигурации PHP на сервере (однако большинство хостинговых компаний оставят это в покое). Чтобы ссылаться на идентификатор сеанса в вашем PHP-коде, вы должны ссылаться на переменную $PHPSESSID (это имя файла cookie; помните это из файлов cookie?)

 1
Author: Akbor, 2016-09-08 08:35:37