Сессии в куках, время жизни

BigHarry

Новичок
Сессии в куках, время жизни

По дефолту кукочные сессии в пхп действуют до закрытия браузера.
Решил продлить это дело, вкатал следующие настройки:
==========================================
session.use_only_cookies on
session.cookie_lifetime 1296000
==========================================
В браузере (Опера) теперь видно, что выданная кука действует 15 дней, но если зайти через какое-то время опять на сайт - то сайт тебя не узнает и подсовывает свежую печенюшку. Что еще надо подправить?
session.gc_maxlifetime будет достаточно, или где-то еще может быть ахтунг?
 

Фанат

oncle terrible
Команда форума
session.use_only_cookies on
непонятно, какое эта настрока имеет отношение к времени жизни сессии.

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

Если тебе нужны сессии, то тебе не нужно их продление.
Если тебе нужно продление - значит, нужны не сессии, а что-то другое
 

BigHarry

Новичок
непонятно, какое эта настрока имеет отношение к времени жизни сессии.
Да никакого, просто указал, что бы народ не предлагал вместо кук использовать сессии в урлах.
Рекомендую получше разобраться со смыслом механизма сессий, и не требовать от них несвойственного.
Дело в том, что сайт нам писали девелоперы, которые, похоже, сами мало разбираются для чего нужны сессии, и тупо задействовали этот механизм. Сессии нужны чиста для того, что бы сайт помнил клиента, а точнее - что тот накидал в покупательскую корзинку - И ВСЕ - более никаких авторизаций, паролей и румов для ввода номеров кредиток - ничего такого нету ! Что-то кардинально переделывать - не могу, поэтому и хочу просто продлить время, когда сайт помнит клиента.
 

tecgnotes

Новичок
Храните сессии в базе. Указанная вами настройка отвечает лишь за то что про нее написано в мане, те передает пользователю идентификатор только в куки. если вермя куки не то которое ожидается то и сессию он не поймает. Тем более в таком механизме как корзина. Вам потребуется усовершенствовать систему и не надеятся только лишь на сессии и куик, тем более что куки могут быть выключены.
 

Gorynych

Посетитель PHP-Клуба
Вам, несомненно, сюда - http://phpfaq.ru/sessions

вкратце, образно ваша ошибка в том, что вы путаете разные вещи:

- кука это это "метка" выдаваемая браузеру. Время жизни куки, это, образно говоря, время в течении которого браузер будет сообщать нужному серверу, что у него есть такая кука.

- сессия это сеанс работы с сервером. Т.е. сеанс запросов и получения ответов от сервера. В рамках сеанса существуют сеансовые переменные. Время жизни сессии на сервере стоит воспринимать, как максимально допустимый интервал между запросами. По истечении этого интервала (т.е. если в течении этого времени запросов к серверу не поступало) сеанс (сессия) считается прерванным, а значения переменных - сброшенными.

- идентификатор сессии - это просто уникальный идентификатор сеанса. Браузер посылает его серверу в виде значения куки или в виде параметров запросов (адресной строки). По нему PHP определяет, какие данные соответсвуют этому сеансу, но если сеанс закончился (истек) данные будут сброшены. Идетифиактор сессии может передаваться через куку или дописываться к адресам ссылок. Механизм работы сессий не зависит от способа передачи идентификатора.
 

BigHarry

Новичок
Храните сессии в базе. Указанная вами настройка отвечает лишь за то что про нее написано в мане, те передает пользователю идентификатор только в куки. если вермя куки не то которое ожидается то и сессию он не поймает.
Что за время куки? Браузер смотрит на время куки и решает - убить ее или передать на сервер.
Типа кука такая: PHPSESSID: 4af37de06ac1e0f7725ff18d0deed9f1
Сервер ловит куку, механизм сессий ищет файл /tmp/mysiteses/ses_4af37de06ac1e0f7725ff18d0deed9f1
Вся фигня в том, что сессионный сборщик мусора, похоже, удаляет раньше времени эти файлы - т.е. кука с номером сессии на клиенте еще жива, а на сервере - файл с этим номером уже отправлен в /dev/nul
Вот я и хочу узнать - session.gc_maxlifetime увеличит жизнь сессионных файлов на сервере или нет.
А хранить в б/д - тормознее будет...
тем более что куки могут быть выключены.
Плевать. Выключены - значит все, приехали, у клиента корзинка не работает. Я не хочу ничего в движке переделывать, мне за это не платят, я только могу поднастроить апач и пхп.

-~{}~ 15.08.06 17:45:

Автор оригинала: Gorynych
Вам, несомненно, сюда - http://phpfaq.ru/sessions
Спасибо, но я вчерась там уже побывал...
 

tecgnotes

Новичок
вот из мана -
????: If different scripts have different values of session.gc_maxlifetime but shares the same place for storing the session data then the script with the minimum value will be cleaning the data. In this case, use this directive together with session.save_path.

Если вы хотите проблит время жизни сесси то надежнее будет session_cache_expire
 

BigHarry

Новичок
вот из мана -
????: If different scripts have different values of session.gc_maxlifetime but shares the same place for storing the session data then the script with the minimum value will be cleaning the data. In this case, use this directive together with session.save_path.
Это понятно, у меня сессии используются только на одном сайте, и, соответственно, пересечься с какими-либо другими не могут.

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

Gorynych

Посетитель PHP-Клуба
Если в сессиях используются только куки - то этот параметр ничего не меняет.
это идентификатор сессии передается в виде куки. А рация, по прежнему, на танке
 

tecgnotes

Новичок
"Если в сессиях используются только куки - то этот параметр ничего не меняет" - что бы это могло значить?
Экспир тайм по мне эт и есть время действия(жизни сессии) после которого она становится мусором. Даже если соотв куки еще в браузере. Кэш тут только косвенно. сессия с истекшим параметром expire все равно работать не будет и со временем уберется мусорщиком

-~{}~ 15.08.06 18:22:

Gorynych
именно
 

Фанат

oncle terrible
Команда форума
BigHarry
короче.
ставь гц макслайфтайм, но гарантии, что оно будет жить две недели, тебе никто не даст.

А хранить в б/д - тормознее будет...
про тормоза лучше ты сам себе расскажи, когда сборщик мусора будет перелопачивать весь мусор за две недели.

впрочем, тебе-то какая разница. тебе ведь за это не платят
 

BigHarry

Новичок
Что бы прекратить всякие домыслы провел ксперимент, как отвечает сервер клиенту с разными настройками.
Первый вариант - session.cookie_lifetime 1296000
PHP:
HTTP/1.0 200 OK
Date: Tue, 15 Aug 2006 14:29:20 GMT
Server: Apache
Vary: Accept-Encoding
Set-Cookie: PHPSESSID=3bcb4e9dbcde1cf2427310c3dd9479ef; expires=Wed, 30 Aug 2006 14:29:20 GMT; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html
Content-Encoding: gzip
Content-Length: 2200
Второй вариант - убрал session.cookie_lifetime вааще
PHP:
HTTP/1.0 200 OK
Date: Tue, 15 Aug 2006 14:32:50 GMT
Server: Apache
Vary: Accept-Encoding
Set-Cookie: PHPSESSID=d3a3ba54403353477c52156a59ee72bf; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html
Content-Encoding: gzip
Content-Length: 2199
Как видно - исчезло из поля куки указание браузеру, до какого момента хранить куку.
Третий вариант - просто добавил session.cache_expire 1296000

PHP:
HTTP/1.0 200 OK
Date: Tue, 15 Aug 2006 14:35:33 GMT
Server: Apache
Vary: Accept-Encoding
Set-Cookie: PHPSESSID=34d2374e264d83942a5663ef5086c326; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html
Content-Encoding: gzip
Content-Length: 2333
Как видим - при добавлении session.cache_expire ничего не меняется, в куке никаких дополнительных директив по ее сроку сохранности не появилось.
В итоге вывод - session.cache_expire не влияет на куку, выдаваеммую сессиями.
 

Фанат

oncle terrible
Команда форума
чего только люди не сделают, чтобы документацию не читать...
 

tecgnotes

Новичок
Как видно - исчезло из поля куки указание браузеру, до какого момента хранить куку - куда исчезло?оно просто стало дефолтным - у Вас же написано Expires: Thu, 19 Nov 1981 08:52:00 GMT во втором варианте. Потом эта директива должна вызываться до инита сессии. Может после вызывали? Но по-моему мы не о том спорим ваще:)
Фанат
- согласен :)
 

BigHarry

Новичок
ставь гц макслайфтайм, но гарантии, что оно будет жить две недели, тебе никто не даст.
Хе, понятно что гарантий нету. Ну если только на файл средствами системы не поставить пермит на запрет удаления.
про тормоза лучше ты сам себе расскажи, когда сборщик мусора будет перелопачивать весь мусор за две недели.
Я вот подумал - как бы этого сборщика вааще отключить, а старые сессионные файлики грохать по шедулеру через rm... Это реально?

-~{}~ 15.08.06 18:59:

у Вас же написано Expires: Thu, 19 Nov 1981 08:52:00 GMT во втором варианте.
Потом эта директива должна вызываться до инита сессии. Может после вызывали?
Вы путаете - Expires: Thu, 19 Nov 1981 08:52:00 GMT - это не для куки, а для паги дитректива. Она указывает, что страница протухла, и ее кэшировать не надо. Кука тут не причем. Ведь в первом варианте - протухание печенья запланировано на 30 Aug 2006 14:29:20 GMT, а страница - уже протухшая - Thu, 19 Nov 1981 08:52:00 GMT
Инит сессии тут непричем. Каждый раз одна и таже страница со скриптом вызывалась.
 

Фанат

oncle terrible
Команда форума
Я вот подумал - как бы этого сборщика вааще отключить, а старые сессионные файлики грохать по шедулеру через rm... Это реально?
реально, нереально... тебе же за написание шедулера деньги не платят?
 

BigHarry

Новичок
Фанат
У вас есть конструктив или только пристебы остались?
 
Сверху