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

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

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

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

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

Ответ 1

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

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

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


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


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

Ответ 2

Как работает PHP-сеанс

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

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

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

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

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

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

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

Ответ 3

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

Ответ 4

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