Как сделать так, чтобы срок действия cookie сеанса ASP.NET истек с помощью ASP.NET HttpSession?

Я создал HttpCookie для обмена данными в субдомене:

HttpCookie cookie = new HttpCookie("sessionGUID");
cookie.Value = value;
cookie.Domain = ".example.com";

Response.Cookies.Set(cookie);

Я небрежно предположил, что, поскольку это «сеансовый» файл cookie (срок действия не истекает), он истечет вместе с моим сеансом ASP.NET. Конечно, для браузера это файл cookie сеанса браузера, не связанный с сеансом ASP.NET.

Что я хочу сделать, так это истечь эти файлы cookie сеанса браузера вместе с сеансом ASP.NET.

Я думаю, мне просто нужно установить Expires на то же значение, что и сеанс ASP.NET. Как мне определить это программно?


person Simon_Weaver    schedule 07.12.2008    source источник


Ответы (1)


Если им просто нужно быть рядом, тогда что-то вроде этого:

int expirationMinutes = Session.Timeout;
if (System.Web.HttpContext.Current.Response.Cookies["monster"]!=null)
{
    System.Web.HttpContext.Current.Response.Cookies["monster"].Expires =
                                 DateTime.Now.AddMinutes(expirationMinutes);
}

Таймер сеанса сбрасывает все, что пользователь отправляет или получает, поэтому, поскольку код выполняется на сервере прямо сейчас, оставшееся время текущего сеанса составляет Session.Timeout, скажем, 20 минут.

Через 20 минут cookie не будет принят, и вам придется выпустить новый.

person MatthewMartin    schedule 07.12.2008
comment
дох. Я посмотрел на объект Session, но мне было лень прокрутить вниз и увидеть свойство Timeout. На первый взгляд это не выглядело так, как будто в нем было что-то интересное, и я не мог найти этого на некоторых других объектах. Благодарность! - person Simon_Weaver; 08.12.2008
comment
Тайм-аут объекта Session сбрасывается при каждом запросе страницы. Таким образом, если этот код не будет выполняться при каждом запросе, срок действия cookie быстро перестанет синхронизироваться с истечением срока действия сеанса. - person Sean Carpenter; 23.11.2009
comment
Свойство Expires является абсолютным DateTime, а Session.Timeout - длительностью int в минутах. Это не имеет отношения; это не компилируется. - person goodeye; 22.09.2014