Как работают PHP сессии? (не "как они используются?")
файлы сеансов обычно хранятся, скажем, в /tmp/
на сервере, и называется sess_{session_id}
. Я смотрю на содержимое и не могу понять, как они действительно работают.
извлечение имени переменной и содержимого из файла легко. Но как PHP узнает, какая сессия кому принадлежит?
session_id кажется совершенно случайным, и один IP-адрес может иметь несколько пользователей, и каждый пользователь может иметь несколько сеансов, если у них есть более одного окна браузера открыть.
Так как же это работает?
4 ответа:
в общей ситуации:
- идентификатор сеанса отправляется пользователю при создании его сеанса.
- он хранится в файле 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; помните, что из файлов cookie?)