Как работают сессии PHP? (не «как они используются?») - PullRequest
114 голосов
/ 08 октября 2009

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

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

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

Так как это работает?

Ответы [ 4 ]

186 голосов
/ 08 октября 2009

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

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

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


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


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

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

8 голосов
/ 10 декабря 2016

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

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

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

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

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

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

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

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

4 голосов
/ 08 октября 2009

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

1 голос
/ 08 сентября 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...