Помогите мне понять, правильно ли я понимаю, как сеансы работают в PHP - PullRequest
0 голосов
/ 23 января 2011
  1. Идентификатор сеанса хранится на клиенте таким образом, который обычно рассеивается при закрытии браузера (сохраняется как файл cookie?).
  2. Идентификатор сеанса и связанные с ним данные хранятся на сервере (где?) для каждого клиента, который запускает один.

Главное, что меня интересует, это то, как сервер знает, когда закончился сеанс.Если у клиента больше нет сохраненного идентификатора сеанса (скажем, после закрытия браузера) и он пытается запросить у сервера другой сеанс, он начинает новый сеанс.Знает ли сервер, что нужно собирать данные предыдущего сеанса через некоторое время?Мне кажется, что-то, чем можно злоупотреблять ...

Ответы [ 3 ]

2 голосов
/ 23 января 2011
  1. Идентификатор сеанса обычно хранится в клиентском браузере с использованием файла cookie (или в параметрах URL, но это не рекомендуется, как описано в http://php.net/manual/en/session.security.php)
  2. Сеансы хранятся в каталоге, определенном session.save_path (например, /var/lib/php/sessions), или во временном каталоге системы, если он не установлен (обычно /tmp).

Сеансы периодически удаляются мусором, либо самим PHP во время запроса, либо заданием cron (например, в Debian это по умолчанию). Смотри http://php.net/manual/en/session.configuration.php#ini.session.gc-probability

Главное, что меня интересует, это то, как сервер знает, когда сессия закончилась

Он не знает. Однако он знает, когда сеанс не использовался с определенного периода времени, поэтому он может удалять неиспользуемые сеансы.

Знает ли сервер, что нужно собрать данные предыдущего сеанса через некоторое время?

Да. Это определяется настройкой session.gc_maxlifetime ini. Любой сеанс старше этого будет удален во время сборки мусора. Частота сбора мусора может быть настроена с настройками ini session.gc_probability и session.gc_divisor. (См. документ .)

Мне кажется, что-то, чем можно злоупотреблять.

Если вы имеете в виду, что кто-то может создать слишком много устаревших сеансов на сервере; да, это, вероятно, правда.

0 голосов
/ 23 января 2011

то, что вы описываете, совершенно верно.И да, этим можно легко злоупотреблять.Есть даже инструмент, который автоматически захватывает сессии вокруг вас (ищите firesheep).Сеансы обычно хранятся в виде файлов cookie SESSION или передаются между сервером и клиентом каждый раз.
Проверьте PHP на очень короткое вступление , и некоторые сведения о сеансе и безопасности помогут вам в этом.1005 *

0 голосов
/ 23 января 2011

Сессии истекают автоматически и очищаются в зависимости от настроек (например, после 20 дней бездействия), и они хранятся в linux, обычно в / tmp /

Проверьте php.ini для получения дополнительной информации

...