2014-10-02 3 views
0

Если у меня есть файл cookie, срок действия которого истекает в 7 вечера сегодня, и я начинаю сеанс в 6:30 вечера с запросом, сделанным во время этого сеанса, но после 7 вечера будет содержать файл cookie, потому что он удаляется, когда сеанс завершается, или браузер уже удалил его?Действительно ли cookie истекает во время сеанса?

ответ

2

Да, cookie может истекать во время сеанса и регулярно делать это. Куки-файлы истекают по истечении срока их действия независимо от того, находится ли он в сеансе или нет в сеансе. Если сервер хочет, чтобы файл cookie продолжался в течение сеанса, он должен сбросить cookie как файл cookie сеанса или установить время истечения в будущем.

Браузеру не следует отправлять файлы cookie, срок действия которых истек до сервера. Это был рассмотрен в RFC 2965 (октябрь 2000 г.), в котором говорится:

Max-Age = значение
            ФАКУЛЬТАТИВНЫМ. Значение атрибута Max-Age является дельта-секунды,
            время жизни куки в секундах, десятичное неотрицательное
            целое число. Для того, чтобы правильно обрабатывать кэшированные печенья, клиент ДОЛЖЕН
            вычислить возраст печенья по расчету возрастного
            правила в HTTP/1.1 спецификации [RFC2616]. Когда возраст
            больше, чем дельта-секунды секунд, клиенту следует отбросить
            печенье.
Нулевое значение означает, что куки следует отбрасывать
            немедленно.

[Выделено]

И говорит:

Печенье с истекшим сроком годности должны были отброшены, и, таким образом, не являются пересылается на сервер происхождения. [Выделено]

Этот документ был в месте с октября 2000 года по апрель 2011 года и в этот момент, RFC 2965 (октябрь 2000) был заменен RFC 6265 (апрель 2011 г.). RFC 6265 изменил требование об удалении файлов с истекшим сроком действия с «СЛЕДУЕТ» до «ДОЛЖЕН».RFC 6265 говорит:

4. Server Requirements 
... 
4.1.2.1. The Expires Attribute 

    The Expires attribute indicates the maximum lifetime of the cookie, 
    represented as the date and time at which the cookie expires. The 
    user agent is not required to retain the cookie until the specified 
    date has passed. In fact, user agents often evict cookies due to 
    memory pressure or privacy concerns. 

4.1.2.2. The Max-Age Attribute 

    The Max-Age attribute indicates the maximum lifetime of the cookie, 
    represented as the number of seconds until the cookie expires. The 
    user agent is not required to retain the cookie for the specified 
    duration. In fact, user agents often evict cookies due to memory 
    pressure or privacy concerns. 

     NOTE: Some existing user agents do not support the Max-Age 
     attribute. User agents that do not support the Max-Age attribute 
     ignore the attribute. 

    If a cookie has both the Max-Age and the Expires attribute, the Max- 
    Age attribute has precedence and controls the expiration date of the 
    cookie. If a cookie has neither the Max-Age nor the Expires 
    attribute, the user agent will retain the cookie until "the current 
    session is over" (as defined by the user agent). 
... 
5. User Agent Requirements 
... 
5.2.1. The Expires Attribute 

    If the attribute-name case-insensitively matches the string 
    "Expires", the user agent MUST process the cookie-av as follows. 

    Let the expiry-time be the result of parsing the attribute-value as 
    cookie-date (see Section 5.1.1). 

    If the attribute-value failed to parse as a cookie date, ignore the 
    cookie-av. 

    If the expiry-time is later than the last date the user agent can 
    represent, the user agent MAY replace the expiry-time with the last 
    representable date. 
    If the expiry-time is earlier than the earliest date the user agent 
    can represent, the user agent MAY replace the expiry-time with the 
    earliest representable date. 

    Append an attribute to the cookie-attribute-list with an attribute- 
    name of Expires and an attribute-value of expiry-time. 

5.2.2. The Max-Age Attribute 

    If the attribute-name case-insensitively matches the string "Max- 
    Age", the user agent MUST process the cookie-av as follows. 

    If the first character of the attribute-value is not a DIGIT or a "-" 
    character, ignore the cookie-av. 

    If the remainder of attribute-value contains a non-DIGIT character, 
    ignore the cookie-av. 

    Let delta-seconds be the attribute-value converted to an integer. 

    If delta-seconds is less than or equal to zero (0), let expiry-time 
    be the earliest representable date and time. Otherwise, let the 
    expiry-time be the current date and time plus delta-seconds seconds. 

    Append an attribute to the cookie-attribute-list with an attribute- 
    name of Max-Age and an attribute-value of expiry-time. 
... 
5.3. Storage Model 
... 
    A cookie is "expired" if the cookie has an expiry date in the past. 

    The user agent MUST evict all expired cookies from the cookie store 
    if, at any time, an expired cookie exists in the cookie store. 

    At any time, the user agent MAY "remove excess cookies" from the 
    cookie store if the number of cookies sharing a domain field exceeds 
    some implementation-defined upper bound (such as 50 cookies). 

    At any time, the user agent MAY "remove excess cookies" from the 
    cookie store if the cookie store exceeds some predetermined upper 
    bound (such as 3000 cookies). 

    When the user agent removes excess cookies from the cookie store, the 
    user agent MUST evict cookies in the following priority order: 

    1. Expired cookies. 

    2. Cookies that share a domain field with more than a predetermined 
     number of other cookies. 

    3. All cookies. 

    If two cookies have the same removal priority, the user agent MUST 
    evict the cookie with the earliest last-access date first. 

    When "the current session is over" (as defined by the user agent), 
    the user agent MUST remove from the cookie store all cookies with the 
    persistent-flag set to false. 
+0

спасибо, очень подробно! –

Смежные вопросы