Как создать постоянный и непостоянный файл cookie?

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


person Chung Wu    schedule 06.10.2010    source источник


Ответы (4)


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

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

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

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

Из RFC (выделено мной):

Установщик файлов cookie может указать дату удаления, и в этом случае файл cookie будет удален в эту дату.

Если установщик файлов cookie не указывает дату, файл cookie удаляется, как только пользователь закрывает свой браузер.

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

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

person Tim Medora    schedule 06.10.2010
comment
И если я хочу, чтобы файл cookie сохранялся только для сеанса, какой срок действия мне следует установить? - person Chung Wu; 06.10.2010
comment
Спасибо! Означает ли это, что любой Set-Cookie без пункта expires будет файлом cookie сеанса и будет потерян после перезапуска браузера? Потому что это не то, что я вижу... Как только я делаю Set-Cookie без истечения срока действия и перезапускаю браузер, я все еще могу прочитать этот файл cookie. Это ожидается? - person Chung Wu; 06.10.2010
comment
Я дважды проверил, чтобы убедиться, и разместил несколько дополнительных ссылок. На каком языке/веб-сервере вы работаете, что вы видите такое поведение? - person Tim Medora; 06.10.2010
comment
Чувак, извини, что превратил это в сеанс отладки! Я использую пилоны, но сейчас просто смотрю заголовки HTTP. После выполнения Set-Cookie key=something; path=/;, перезапустив браузер и перезагрузив страницу, я вижу, что этот файл cookie все еще находится в запросе. Не уверен, что еще мне не хватает... - person Chung Wu; 07.10.2010
comment
Не беспокойся. Если вы посмотрите на настоящую файловую систему, сможете ли вы увидеть хранящийся там файл cookie? В IE на Vista/Windows 7 файлы cookie должны находиться в папке C:\Users\[имя пользователя]\AppData\Local\Microsoft\Windows\Temporary Internet Files. - person Tim Medora; 07.10.2010
comment
Наконец-то я узнал, что произошло. В Firefox, если вы включите восстановление сеанса (При запуске Firefox: Показать мои окна и вкладки с последнего раза), он восстановит даже файлы cookie сеанса при перезапуске! См. bugzilla.mozilla.org/show_bug.cgi?id=443354. - person Chung Wu; 13.10.2010
comment
Это интересное поведение... с одной стороны, это кажется огромной ошибкой, с другой стороны, я понимаю, почему пользователи, не обладающие техническими знаниями, ожидают, что их сеансы просто продолжатся. Теоретически вы можете выполнить ограниченные проверки для этого сценария, посмотрев, действительно ли сеанс, на который ссылается файл cookie, все еще существует, хотя я обнаружил, что подобные проверки могут быть заведомо сложными и подверженными ошибкам. Более простым способом было бы просто писать постоянный файл cookie каждый раз, когда страница просматривалась с датой, и проверять, сколько времени прошло с момента последней активности. - person Tim Medora; 14.10.2010
comment
Кажется удивительным, что простое добавление даты в файл cookie делает его постоянным. - person Robert Moore; 15.06.2017
comment
Вы также можете сделать это с max-age? - person Aaron Franke; 19.11.2019
comment
@AaronFranke - похоже, вы можете сделать файл cookie постоянным с помощью max-age: tools.ietf.org /html/rfc6265#page-21 - person Tim Medora; 19.11.2019

В ASP.NET есть два типа файлов cookie.

Постоянные файлы cookie:

Файлы cookie хранятся на жестком диске вашего компьютера. Они остаются на вашем жестком диске и могут быть доступны веб-серверам до тех пор, пока они не будут удалены или не истечет срок их действия.

public void SetPersistentCookies(string name, string value)
{
    HttpCookie cookie = new HttpCookie(name);

    cookie.Value = value;

    cookie.Expires = Convert.ToDateTime(“12/12/2008″);

    Response.Cookies.Add(cookie);
}

Непостоянные файлы cookie:

Файлы cookie сохраняются только во время работы вашего веб-браузера. Они могут использоваться веб-сервером только до тех пор, пока вы не закроете браузер. Они не сохраняются на вашем диске.

public void SetNonPersistentCookies(string name, string value)
{
    HttpCookie cookie = new HttpCookie(name);

    cookie.Value = value;

    Response.Cookies.Add(cookie);
}
person Deepak.Aggrawal    schedule 02.08.2011

Сеансовый файл cookie

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue");
Response.Cookies.Add(cookie);

Файл cookie с определенной отметкой времени (библиотека .NET DateTime)

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue");
cookie.Expires = DateTime.Today.AddMonths(12); //or AddMinutes, or AddHours...
Response.Cookies.Add(cookie);

Постоянный файл cookie

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue");
cookie.Expires = DateTime.MaxValue;
Response.Cookies.Add(cookie);
person expertCode    schedule 07.06.2011

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

Ссылка: https://www.cookiepro.com/knowledge/what-is-a-persistent-cookie/

Если файл cookie не содержит даты истечения срока действия, он считается сеансовым/непостоянным файлом cookie.

Таким образом, в основном постоянные файлы cookie имеют атрибут expires, например.

expires="Wdy, DD-Mon-YYYY HH:MM:SS GMT"
person Saikat    schedule 10.12.2019