如何使用ASP.NET HttpSession使ASP.NET会话cookie过期?

4

我创建了一个 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会话相同的值即可。如何在程序中确定这个值?

1个回答

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将不被接受,您将需要发出新的Cookie。


我确实查看了Session对象,但是我懒得往下滚动查看Timeout属性。乍一看它似乎没有什么有趣的东西,而且我在其他一些对象上也找不到它。谢谢! - Simon_Weaver
2
Session对象在每个页面请求时都会重置其超时时间。因此,除非该代码将在每个请求上执行,否则Cookie的过期时间将很快与Session的过期时间不同步。 - Sean Carpenter
Expires属性是一个绝对的DateTime,而Session.Timeout是以分钟为单位的int持续时间。它们之间没有关联;这不会编译。 - goodeye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接