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

Ric*_*ett 6 asp.net cookies response request httpcontext

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

最初,我使用了这个:

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 });
}
Run Code Online (Sandbox Code Playgroud)

但是,这会导致错误,OutOfMemoryException因为for循环永远不会退出 - 每次添加cookie时Response,它都会被添加到`Request.

以下方法有效:

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 });
}
Run Code Online (Sandbox Code Playgroud)

那么,HttpContext.Request.Cookies和之间的关系到底是什么HttpContext.Response.Cookies

SLa*_*aks 12

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

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

文件说明:

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

使用HttpResponse.Cookies集合添加cookie后,即使响应尚未发送到客户端,cookie也会立即在HttpRequest.Cookies集合中提供.


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