Где хранятся переменные $ _SESSION? - PullRequest
151 голосов
/ 18 января 2009

Хранятся ли $_SESSION переменные на клиенте или сервере?

Ответы [ 9 ]

157 голосов
/ 18 января 2009

Расположение хранилища переменных $_SESSION определяется конфигурацией PHP session.save_path. Обычно это /tmp в системе Linux / Unix. Используйте функцию phpinfo() для просмотра ваших конкретных настроек, если не уверены на 100%, создав файл с таким содержимым в DocumentRoot вашего домена:

<?php
    phpinfo();
?>

Вот ссылка на документацию PHP об этом параметре конфигурации:

http://php.net/manual/en/session.configuration.php#ini.session.save-path

125 голосов
/ 18 января 2009

Как уже упоминалось, содержимое хранится на сервере. Однако сеанс идентифицируется идентификатором сеанса, который сохраняется на клиенте и отправляется с каждым запросом. Обычно идентификатор сеанса хранится в файле cookie, но его также можно добавить к URL-адресу. (Это PHPSESSID параметр запроса, который вы несколько раз видите)

22 голосов
/ 18 января 2009

Они обычно хранятся на сервере. Где они хранятся, решать вам как разработчику. Вы можете использовать переменную конфигурации session.save_handler и session_set_save_handler, чтобы контролировать, как сеансы сохраняются на сервере. Метод сохранения по умолчанию - сохранение сеансов в файлы. Место их сохранения контролируется переменной session.save_path.

18 голосов
/ 08 августа 2012

Одно дополнение: следует отметить, что в случае, если «/ tmp» является каталогом, в котором хранятся данные сеанса (что, по-видимому, является значением по умолчанию), сеансы не будут сохраняться после перезагрузки этого веб-сервера, так как «/ tmp» часто удаляется при перезагрузке. Концепция клиентской персистентности остается неизменной с сохранением хранилища на сервере, что может привести к сбою, если каталог / tmp используется для данных сеанса.

12 голосов
/ 17 июля 2013

Я использую Ubuntu и мои сеансы хранятся в /var/lib/php5.

12 голосов
/ 19 января 2009

В Debian (разве это не так для большинства дистрибутивов Linux?) Он сохраняется в / var / lib / php5 /. Как уже упоминалось выше, он настроен в вашем php.ini.

7 голосов
/ 18 января 2009

Как отметил мистер Тейлор, это обычно устанавливается в php.ini. Обычно они хранятся в виде файлов в определенном каталоге.

4 голосов
/ 03 марта 2017

Для Ubuntu 16.10 сессии сохраняются в /var/lib/php/session/...

1 голос
/ 15 июля 2017

Как это работает? Откуда оно знает, что это я?

Большинство сеансов устанавливают на компьютере пользователя ключ пользователя (называемый sessionid), который выглядит примерно так: 765487cf34ert8dede5a562e4f3a7e12. Затем, когда сеанс открывается на другой странице, он сканирует компьютер на предмет наличия ключа пользователя и запускается на сервер, чтобы получить ваши переменные.

Если вы ошибочно очистите кеш, ваш ключ пользователя также будет очищен. Вы больше не сможете получать переменные с сервера, поскольку не знаете свой идентификатор.

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