Должен ли веб-браузер удалять все файлы cookie сеанса (срок действия = 0) при выходе?

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

http://www.cookiecentral.com/faq/ говорит, что:

«... обычно сеанс - это время, в течение которого браузер открыт ...»

http://php.net/manual/en/function.setcookie.php говорит:

«Если установлено значение 0 или опущено, срок действия cookie истечет в конце сеанса (при закрытии браузера)».

Однако некоторые эксперименты в Firefox (3.0.8) показывают, что:

  • файлы cookie, установленные как сеансовые и безопасные, удаляются при выходе
  • файлы cookie, установленные только для сеанса, не удаляются при выходе

Opera (9.64) ведет себя так, как я ожидал, удаляя файлы cookie сеанса при выходе, независимо от того, установлен ли он как безопасный или нет.

Я хотел иметь возможность полагаться на это в веб-приложении, над которым я работаю (наличие безопасного файла cookie и небезопасного файла cookie в качестве флага «вошел в систему», и их срок действия истекает вместе, либо в реальном времени, либо 0 для сеанс), но кажется, что даже если он включен в стандарт, браузеры недостаточно согласованы, чтобы полагаться на него: /

Является ли это ошибкой браузера, ожидаемым поведением и / или фактическое время жизни файлов cookie сеанса на самом деле не определено в стандарте?


person David Gardner    schedule 15.04.2009    source источник


Ответы (1)


Никогда не следует полагаться на клиентские функции.

Функция, над которой вы работаете, обычно реализуется с хранением идентификатора сеанса на стороне клиента и реальной информации пользователя на стороне сервера (его идентификатор, независимо от того, вошел ли он в систему или нет, его личная информация и т. Д.).

Также имейте в виду, что файлы cookie отправляются при каждом запросе, поэтому чем меньше вы храните в файле cookie, тем лучше.

person Seb    schedule 15.04.2009
comment
Обратите внимание, что никогда не полагаться не означает, что вы не можете попытаться воспользоваться преимуществами клиентских функций. Установите время истечения срока действия файлов cookie, как оно должно работать, но убедитесь, что ваш серверный код обрабатывает старые, недопустимые файлы cookie. - person dwc; 15.04.2009
comment
Полностью согласен с dwc. Вы можете воспользоваться преимуществами клиентских функций; просто не думайте, что они всегда будут доступны каждому пользователю и каждому запросу. - person Seb; 15.04.2009
comment
Это действительно очень важный момент, который я полностью упустил. Предположение, что истечение срока действия будет работать для этого во всех браузерах, всегда будет вызывать у меня эту проблему. Думаю, мне придется найти другой способ сделать это ... и до сих пор он казался довольно элегантным: / - person David Gardner; 15.04.2009