2010-04-22 42 views
6

Có thể cập nhật giá trị cookie ASP.NET mà không cần phải cập nhật thời gian hết hạn không? Tôi đã thấy rằng nếu tôi thử và cập nhật Cookie mà không cập nhật hết hạn, cookie đó không còn tồn tại nữa. Tôi có đoạn mã sau mà tôi đang cố sửa đổi. Điểm của việc hết hạn là gì, nếu mỗi lần giá trị cookie được cập nhật, vậy có phải là hết hạn không?Giá trị cập nhật cookie ASP.NET mà không cần cập nhật hết hạn?

 HttpCookie cookie = HttpContext.Current.Request.Cookies[constantCookie]; 

     if (cookie == null) 
      cookie = new HttpCookie(constantCookie); 

     cookie.Expires = DateTime.Now.AddYears(1); 
     cookie.Value = openClose; 
     HttpContext.Current.Response.Cookies.Set(cookie); 
+2

"điểm là gì có thời gian hết hạn, nếu mỗi lần giá trị cookie được cập nhật, vậy là hết hạn? " - Thực ra đó là những gì bạn muốn rất nhiều thời gian. Kịch bản như "nếu bạn không ghé thăm trong một tháng chúng tôi sẽ quên bạn", phụ thuộc vào thực tế là mỗi khi bạn truy cập vào cookie được thiết lập để hết hạn một tháng do đó. –

+0

Rất đúng, tôi chắc chắn sẽ đồng ý với bạn vào thời điểm này. – aherrick

Trả lời

5

Lớp ASP.NET HttpCookie không thể khởi tạo thuộc tính Expires khi đọc trong cookie từ yêu cầu HTTP (vì đặc tả HTTP không yêu cầu khách hàng gửi giá trị hết hạn cho máy chủ trong địa điểm đầu tiên). Và nếu bạn không đặt thuộc tính Expires trước khi bạn đặt cookie trở lại trong Phản hồi HTTP, nó sẽ biến nó thành cookie phiên thay vì một cookie lâu dài.

Nếu bạn thực sự phải hết hạn, bạn có thể đặt ngày hết hạn ban đầu như một phần của giá trị cookie, khi bạn đọc cookie, phân tích giá trị và đặt thời hạn mới phù hợp.

Một ví dụ mà không bao gồm bất kỳ dữ liệu khác để cookie là không thực sự hữu ích - bạn sẽ phải serialize nó bằng cách nào đó với các dữ liệu thực tế mà bạn muốn lưu trữ:

HttpCookie cookie = HttpContext.Current.Request.Cookies[constantCookie]; 
DateTime expires = DateTime.Now.AddYears(1); 

if (cookie == null) { 
    cookie = new HttpCookie(constantCookie); 
} else { 
    // cookie.Value would have to be deserialized if it had real data 
    expires = DateTime.Parse(cookie.Value); 
} 

cookie.Expires = expires; 
// save the original expiration back to the cookie value; if you want to store 
// more than just that piece of data, you would have to serialize this with the 
// actual data to store 
cookie.Value = expires.ToString(); 

HttpContext.Current.Response.Cookies.Set(cookie); 
+2

Câu trả lời hay, mặc dù không chỉ ASP.NET mà không khởi tạo ngày hết hạn - nói chung, ngày hết hạn của cookie là 'chỉ ghi' và không được công bố cho máy chủ web theo yêu cầu http. – maxp

+0

Đối với tôi mặc dù ở phía máy chủ, cookie hết hạn giá trị không hiển thị giá trị được đặt cuối cùng, nhưng trình duyệt lưu trữ giá trị chính xác ngay cả khi tôi chỉ cập nhật giá trị cookie và không hết hạn. –

+0

@mrbengi Bài đăng này liên quan đến cookie. Bạn đã đăng câu hỏi mới về cách phân tích cú pháp DateTime hoạt động. Có rất nhiều nguồn để tìm trợ giúp cho điều đó hoặc đặt câu hỏi mới qua liên kết ở trên cùng bên phải của trang StackOverflow. Nhưng nhận xét của bạn không áp dụng cho chủ đề này. –

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