- Идентификатор сеанса обычно хранится в клиентском браузере с использованием файла cookie (или в параметрах URL, но это не рекомендуется, как описано в http://php.net/manual/en/session.security.php)
- Сеансы хранятся в каталоге, определенном
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
. (См. документ .)
Мне кажется, что-то, чем можно злоупотреблять.
Если вы имеете в виду, что кто-то может создать слишком много устаревших сеансов на сервере; да, это, вероятно, правда.