2012-12-06 33 views
7

Tôi đang cố gắng xóa cookie, tuy nhiên nó không bị xóa. Đây là mã tôi cố gắng sử dụng.Xóa sự cố về cookie trong C#

if (Request.Cookies["dcart"] != null) 
{ 
    Response.Write(Request.Cookies["dcart"].Expires); 
    // Response 1/1/0001 12:00:00 AM 

    Response.Write(Request.Cookies["dcart"].Value); 
    // Response 229884 

    HttpCookie myCookie = new HttpCookie("dcart"); 
    myCookie.Expires = DateTime.Now.AddDays(-1d); 
    myCookie.Value = ""; 
    Response.Cookies.Add(myCookie); 
} 

Response.Write(Request.Cookies["dcart"].Expires); 
// Response 1/1/0001 12:00:00 AM 
Response.Write(Request.Cookies["dcart"].Value); 
// Response 229884 

Khi tôi truy xuất lại cookie, không có gì thay đổi. Tôi kiểm tra w/FireFox và Chrome cùng một hành vi. Điểm thú vị là ngày hết hạn hiển thị chính xác trên trình duyệt nhưng trên mã.

Tôi đã thử làm theo và không hoạt động.

  • Đặt ngày hết hạn thành (ngày mai) và thiết lập lại ngày hôm qua.
  • Khởi động lại trình duyệt (xảy ra trình duyệt khác nhau và người)
  • Thiết lập giá trị một cái gì đó
  • Sử dụng HttpContext.Current.Request.Cookies [ "dcart"] ....
  • Request.Cookies [ "dcart" ] .Expires = DateTime.Now.AddYears (-10);

PS. Mã sẽ không hoạt động trực tiếp trên máy của bạn, bởi vì bạn không có cookie.

+0

Sử dụng Fiddler (hoặc bất kỳ trình gỡ lỗi HTTP nào khác) và xem liệu cookie có thực sự được gửi đi hay không. I E. có thể gọi để xóa tất cả cookie khỏi Trả lời trước khi gửi ... –

+0

@DaveZych Request.Cookies ["dcart"]. Expires = DateTime.Now.AddYears (-10); không hoạt động. – asr

Trả lời

3

SOLVED

Vấn đề là con đường. Cookie tôi yêu cầu nằm trong đường dẫn "/ store" và đường dẫn tôi trả lời "/".

if (Request.Cookies["dcart"] != null) 
{ 
    HttpCookie myCookie = new HttpCookie("dcart"); 
    myCookie.Expires = DateTime.Now.AddDays(-1d); 
    myCookie.Path = "/store"; 
    Response.Cookies.Add(myCookie); 
} 

Khi tôi thêm thông tin đường dẫn, nó sẽ bị xóa.

Lưu ý: Tôi đã sử dụng Firebug để theo dõi đường dẫn cookie.

+0

trong chrome đường dẫn cookie có thể dễ dàng tìm thấy trong chrome: // settings/cookies – Tomek

0

Cookie phức tạp hơn so với giao diện. Đọc cho một mô tả rõ ràng về cách sử dụng các tập tin cookie:

On The Care and Handling of Cookies

Để xóa một cookie, theo bài viết liên kết bạn cần phải chỉ đơn giản là thiết lập thời gian hết hạn để bất cứ lúc nào trong quá khứ, nhưng không sử dụng DateTime.MinValue vì một số trình duyệt không xử lý mà ngày một cách chính xác:

Nếu bạn muốn xóa các tập tin cookie trên máy khách hàng, không sử dụng các Response.Cookies.Remove rõ ràng ("MyCookie") mà chỉ đơn giản nói cookie không ghi đè cookie của khách hàng (xem bên dưới để biết thêm giải thích chi tiết), đặt thuộc tính Hết hạn của cookie bất kỳ lúc nào trước thời điểm hiện tại. Điều này sẽ yêu cầu khách hàng ghi đè lên cookie hiện tại với cookie hết hạn và khách hàng sẽ không bao giờ gửi nó trở lại máy chủ.

Một lần nữa, sự cám dỗ là sử dụng DateTime.MinValue (01-Jan-0001 00:00:00) để xóa cookie; một lần nữa, đây sẽ là một sai lầm. Thời gian , Netscape 7 sẽ hoạt động như mong đợi nhưng Internet Explorer 6 coi đây là trường hợp ngoại lệ. Nếu Internet Explorer nhận được cookie với ngày được coi là ngày hết hạn "trống", , cookie sẽ giữ lại cookie cho đến khi trình duyệt đóng và sau đó hết hạn .

Cách an toàn nhất (và đối xứng nhất) để xóa cookie bằng cách sử dụng Ngày hết hạn của DateTime.Now.AddYears (-30).

ví dụ: phương pháp đúng là

Request.Cookies["dcart"].Expires = DateTime.Now.AddYears(-30); 
0

Liên kết này sẽ cung cấp một số câu trả lời cho bạn:

https://msdn.microsoft.com/en-us/library/ms178195.aspx

Trong trường hợp của tôi, chỉ cần làm việc trong localhost, nhưng, khi tôi triển khai đến máy chủ các vấn đề tồn ...

Trong HttpCookie, bạn có thể thử đặt tham số Expire DateTime.Now.AddDays(-1d), (Đặt ngày hết hạn thành ngày hôm qua) và đặt thuộc tính Secure = false.

Sau này, làm việc cho tôi.