HttpContext.Request.Cookies和HttpContext.Response.Cookies之间的关系

时间:2010-11-23 16:41:15

标签: asp.net cookies request response httpcontext

我一直在尝试清除HttpContext.Response中所有Cookie的代码。

最初,我用过这个:

DateTime cookieExpires = DateTime.Now.AddDays(-1);

for (int i = 0; i < HttpContext.Request.Cookies.Count; i++)
{
    HttpContext.Response.Cookies.Add(
        new HttpCookie(HttpContext.Request.Cookies[i].Name, null) { Expires = cookieExpires });
}

但是,这会导致OutOfMemoryException错误,因为for循环永不退出 - 每次向Response添加Cookie时,它都会被添加到`Request。< / p>

以下方法有效:

DateTime cookieExpires = DateTime.Now.AddDays(-1);

List<string> cookieNames = new List<string>();

for (int i = 0; i < HttpContext.Request.Cookies.Count; i++)
{
    cookieNames.Add(HttpContext.Request.Cookies[i].Name);
}

foreach (string cookieName in cookieNames)
{
    HttpContext.Response.Cookies.Add(
       new HttpCookie(cookieName, null) { Expires = cookieExpires });
}

那么,HttpContext.Request.CookiesHttpContext.Response.Cookies之间的关系究竟是什么?

1 个答案:

答案 0 :(得分:11)

Request.Cookies包含完整的Cookie集,包括浏览器发送到服务器的Cookie以及您刚刚在服务器上创建的Cookie。

Response.Cookies包含服务器将发回的cookie 此集合开始为空,应更改为修改浏览器的cookie。

文档说明:

  

ASP.NET包含两个内部cookie   集合。访问的集合   通过Cookies集合   HttpRequest包含cookie   由客户传送到   Cookie标头中的服务器。该   通过收集访问的集合   HttpResponse的Cookies集合   包含在。上创建的新cookie   服务器并传输到客户端   在Set-Cookie标题中。

     

使用后添加cookie   HttpResponse.Cookies集合,   cookie立即可用于   HttpRequest.Cookies集合,甚至   如果没有发送响应   客户。


如果您使for循环向后运行,您的第一个代码示例应该有效 新的cookie将在结束后添加,因此向后循环将忽略它们。

相关问题