2010-11-23 44 views
5

Tôi đã thử nghiệm mã sẽ xóa tất cả cookie trong một số HttpContext.Response.Mối quan hệ giữa HttpContext.Request.Cookies và HttpContext.Response.Cookies

Ban đầu, tôi đã sử dụng này:

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 }); 
} 

Tuy nhiên, điều này sẽ lỗi với một OutOfMemoryExceptionfor vòng lặp không bao giờ thoát ra - mỗi khi bạn thêm một cookie đến Response, nó cũng được thêm vào 'Yêu cầu .

Phương pháp sau đây hoạt động:

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 }); 
} 

Vì vậy, những gì chính xác là mối quan hệ giữa HttpContext.Request.CookiesHttpContext.Response.Cookies?

Trả lời

11

Request.Cookies chứa bộ cookie đầy đủ, cả những cookie mà trình duyệt gửi đến máy chủ và những trình duyệt bạn vừa tạo trên máy chủ.

Response.Cookies chứa các cookie mà máy chủ sẽ gửi lại.
Bộ sưu tập này bắt đầu trống và cần được thay đổi để sửa đổi cookie của trình duyệt.

Các tài liệu khẳng định:

ASP.NET bao gồm hai nội Cookie bộ sưu tập. Bộ sưu tập được truy cập thông qua bộ sưu tập Cookie là HttpYêu cầu chứa cookie được khách hàng truyền đến máy chủ trong tiêu đề Cookie. Bộ sưu tập được truy cập thông qua bộ sưu tập Cookie của HttpResponse chứa cookie mới được tạo trên máy chủ và được truyền đến máy khách trong tiêu đề Đặt cookie.

Sau khi bạn thêm một cookie bằng cách sử dụng bộ sưu tập HttpResponse.Cookies, cookie có sẵn ngay trong bộ sưu tập HttpRequest.Cookies, thậm chí nếu đáp ứng chưa được gửi đến khách hàng.


mẫu mã đầu tiên bạn nên làm việc nếu bạn thực hiện các for vòng lặp chạy phía sau.
Các cookie mới sẽ được thêm sau khi kết thúc, vì vậy vòng lặp ngược sẽ bỏ qua chúng.

Các vấn đề liên quan