我一直在尝试清除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.Cookies
和HttpContext.Response.Cookies
之间的关系究竟是什么?
答案 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将在结束后添加,因此向后循环将忽略它们。