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

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

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

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

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

Solutions Collecting From Web of "Как работают сеансы PHP? (а не «как они используются?»)"

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

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

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

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

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

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

Как работает PHP-сессия

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

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

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

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

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

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

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

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

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