[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как "умирает" сессия
fever
Доброго времени суток! Решил разобраться в процессе уничтожения сессии с сервера - когда, почему, при каких условиях. Причиной послужило наблюдение того, что на одном из сайтов (LAMP) сессия, по истечению дефолтовых session.gc_maxlifetime 24 минуты, не умирает - залогиненный пользователь продолжает пользоваться сайтом. Причем долго не умирает - сессия сохраняется и день, и два и дольше.. Пробовал даже выставлять session.gc_maxlifetime 5 секунд и все равно - никаких изменений. Затем, погуглив, вышел на такую статью: http://physics.grsu.by/seti/doc/PHP/PHP5/g8_4.html.
Получается, что есть еще т. н. как "вероятность смерти" сессии, т.е. вероятность того, что при следующем запросе на сервере запустится сборщик мусора gc и убьет устаревшую сессию.. По дефолту эта вероятность равна 1%. Действительно, поставив session.gc_probability равным 100%, сессия стала убиваться каждый раз после простоя (но это ведь плохой выход!). Значит получается, что:
1) если на сайте будет всего один пользователь, то его сессия будет жить вечно что ли (вероятность 1% от каждого его запроса, что сессия будет уничтожена после простоя, и ему не поможет больше никто другой своими переходами - очень мала!) ?
2) другой вопрос - я замечал, что на некоторых сайтах (на которых тоже только я один запускал сессию) сессия 100% удалялась после простоя.. Почему так могло получиться? Если ли все-таки другие настройки на php-сервере кроме session.gc_probability 100, которые позволяют всегда 100% по истечении времени жизни сессии, убивать ее?
p.s. никакие стандартные настройки, связанные с сессией, не были изменены.
p.p.s. Интересует именно стандартная session, а не то, как можно заменить ее при помощи БД или куков

Очень хочется разобраться в этом, заранее большое спасибо!



Спустя 17 минут, 53 секунды (9.04.2009 - 20:15) kirik написал(а):
Цитата (fever @ 9.04.2009 - 11:57)
Очень хочется разобраться в этом, заранее большое спасибо!

Ну ты все верно описал, и так оно и есть. Вероятность убития сессии была добавлена для того, чтобы при каждом запросе юзера не перерывать всю папку на наличие мертвых сессий. Если у тебя на сайт заходят 2-3 человека, тогда имеет смысл поставить gc_probability побольше, а если же у тебя хотя бы сотня есть, то ты можешь быть уверен что сессии будут всегда очищаться вовремя.
Да и в том, что несколько файликов сессии у тебя будет лежать в папке. Есть они не просят, пусть лежат smile.gif А юзер как только закрывает браузер - его сессионная кука убивается.

Цитата (fever @ 9.04.2009 - 11:57)
другой вопрос - я замечал, что на некоторых сайтах (на которых тоже только я один запускал сессию) сессия 100% удалялась после простоя..

сравни настройки session.gc_divisor и session.gc_probability. Потому что вероятность убития сессии зависит от отношения этих параметров. Тоесть если gc_divisor = 1000, а gc_probability = 1, то сессии будут чиститься каждые 1000 раз (примерно). А по дефолту gc_divisor = 100, тоесть 1% вероятности, как ты и написал.

Спустя 15 часов, 15 минут, 35 секунд (10.04.2009 - 11:30) fever написал(а):
Спасибо большое, kirik. В принципе по поводу удаленной 100% сессии на другом сайте - может быть, что я ковырял другие сайты с того же хоста параллельно - они и убивали сессию и того другого, просто мог этого не заметить smile.gif

Спустя 10 часов, 22 минуты, 4 секунды (10.04.2009 - 21:52) kirik написал(а):
Цитата (fever @ 10.04.2009 - 03:30)
по поводу удаленной 100% сессии на другом сайте - может быть, что я ковырял другие сайты с того же хоста параллельно


Скорее всего так и было. Папка-то одна smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.