Куки умирают раньше сессий

FRIE

Новичок
Прочитал вот -

"expire - время "жизни" переменной (целое число). Если данный параметр не указать, то Cookie будут "жить" до конца сессии, то есть до закрытия браузера. Если время указано, то, когда оно наступит, Cookie самоуничтожится."

Если не указываю время жизни вот так - setcookie("name",$name,"/"); то кука не ставится

А если время укажу - setcookie("name",$name,time()+3600, "/"); то кука помирает раньше сессии, так как время сессии постоянно продлевается при обращении, время а куки не продлевается


Как быть?
 

Redjik

Джедай-мастер
Странный вопрос для человека с 368 сообщениями и датой регистрации 3 года назад.

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

FRIE

Новичок
Странный вопрос для человека с 368 сообщениями и датой регистрации 3 года назад.

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

Фанат

oncle terrible
Команда форума
Вообще-то сессионную куку продлевать не требуется.
 

zerkms

TDD infected
Команда форума
Если не указываю время жизни вот так - setcookie("name",$name,"/"); то кука не ставится
Потому что третий параметр - время жизни, а не путь. Втыкай третьим параметром expire = 0, а четвёртым уже path = '/'
 
  • Like
Реакции: FRIE

FRIE

Новичок
Потому что третий параметр - время жизни, а не путь. Втыкай третьим параметром expire = 0, а четвёртым уже path = '/'
Спасибо добрый человек!

У меня в фаербаге теперь у этих кук вместо времени жизни пишется "сессия", - значит ли это что данные которые в этих куках теперь хранятся на стороне сервера? или это просто значит что они умирают по окончании сессии ?
 

zerkms

TDD infected
Команда форума
FRIE
Это значит, что они умрут с закрытием браузера. Ни раньше, ни позже
 
  • Like
Реакции: FRIE

FRIE

Новичок
FRIE
Это значит, что они умрут с закрытием браузера. Ни раньше, ни позже
Обьясните такую вещщь пожалуйста, просто понять не могу. Я открыл браузер и залогинился, в настройках сервера сессия живёт час, браузером не пользовался просто свернул, через час обновил страничку а сессия жива. Что происходит на сервере? Там хранится эта сессия чтоли даже через час? Когда браузер закрывается на сервер посылается команда и сессия удаляется?
 

zerkms

TDD infected
Команда форума
FRIE
Следует разделять 2 вещи:
1. Идентификатор сессии в куке. Живёт (по умолчанию) до тех пор, пока браузер не закрыт. Если свернуть браузер на год - то через год кука с идентификатором будет ещё там
2. Файл с данными на сервере, с именем == идентификатору из куки. Эти файлы (по умолчанию) подчищаются пхп. Удаляются те из них, к которым не было доступа в течение времени жизни сессии (устанавливается в php.ini, по дефолту 1440секунд, 24 минуты). Как только это время истекает - файл сессии становится кандидатом на удаление сборщиком мусора. Сборщик мусора запускается (по дефолту) раз в примерно 1000 запросов к твоему пхп (вероятность тоже настраивается в php.ini).

Какие выводы мы можем сделать из этих тезисов:
1. Сессия на сервере живёт как минимум в течение установленного времени жизни
2. Сессия на сервере живёт как максимум - бесконечность лет. В случае, если на твой проект никто не заходит - пхп не запускается, соответственно сборщик мусора тоже не запускается
3. В случае, если прошло время жизни сессии, но файл ещё не был удалён, а мы сделали очередной запрос - дата последней модификации файла меняется, соответственно отсчёт для сборщика мусора начинается заново
 
  • Like
Реакции: FRIE

baev

‹°°¬•
Команда форума
FRIE, ссылку уже дали: http://phpfaq.ru/sessions
— там всё разжёвано так, что дальше — только «нанимать специалиста».

Тему закрываю.
 

FRIE

Новичок
Большое спасибо за информацию про сборщик мусора. Теперь всё стало понятно =) !
 
Сверху