2013-05-07 63 views
8

Có tiêu đề Độ tuổi tối đa cho phép chỉ định thời gian hết hạn của cookie. Thật không may là Internet Explorer 6, 7, 8 và có lẽ sau đó không hỗ trợ Max-Age và yêu cầu tiêu đề hết hạn với một ngày tuyệt đối trong GMT.Set-Cookie: Hết hạn thuộc tính, độ lệch đồng hồ và sự cố Internet Explorer

Nó không phải là không phổ biến rằng giờ GMT và TZ cài đặt trên khách hàng cụ thể có thể không chính xác. Hãy xem xét người dùng đã không xác định múi giờ của mình một cách chính xác và điều chỉnh đồng hồ theo cách thủ công.

Hơn thế nữa, đôi khi có thể có một đồng hồ đáng kể trong vài phút mà người dùng không biết về chúng.

Trong trường hợp này, giờ GMT của nó có thể được chuyển sang vài giờ. Hiệu quả nó sẽ ngăn chặn từ một máy chủ để đặt bất kỳ cookie nào yêu cầu thời gian hết hạn ngắn. Xem xét một cookie có độ tuổi tối đa 10 phút sẽ không bao giờ được đặt nếu TZ không chính xác.

ý tưởng gốc về cách giải quyết vấn đề (mà không hoạt động hoặc có vấn đề):

  1. Tất nhiên là tốt nhất là sử dụng Max-Age hoặc thậm chí xác định cả hai như tất cả các trình duyệt sẽ bỏ qua "Hết Hạn "một phần - nhưng nó không hoạt động trong IE
  2. Một cách khác tôi nghĩ là đặt ngày: tiêu đề hy vọng IE sẽ biết để tính toán sự khác biệt để làm việc xung quanh skew đồng hồ ... Nhưng nó không giúp IE.
  3. Lấy thời gian từ khách hàng theo yêu cầu (sử dụng JavaScript) và tính chênh lệch đồng hồ và sau đó điều chỉnh hết hạn tiêu đề nếu cần. Tuy nhiên nó đòi hỏi thao tác dữ liệu phức tạp bao gồm một số cách để gửi thời gian đến máy chủ.

Câu hỏi:

  1. tốt nhất và thực tế phổ biến để xử lý Thời gian hết hạn cho cookie trong IE là gì?
  2. Làm thế nào để bạn làm điều đó trong các ứng dụng của bạn
+0

_ “Xem xét một cookie có độ tuổi tối đa là 10 phút” _ - khó giải quyết được trong các điều kiện được mô tả. Tôi muốn lưu trữ thời gian _server-side_ cho đến khi giá trị đó cũng được xem là hợp lệ vào cookie (và nó được đặt cho khung thời gian dài hơn) - sau đó bạn có thể kiểm tra phía máy chủ khi nhận lại cookie đó nếu bạn vẫn muốn sử dụng giá trị của nó cho một cái gì đó hay không… – CBroe

+0

Tôi hiểu rằng 10 phút là một thời gian nhỏ. Nhưng trong mọi trường hợp, ngay cả khi bạn cần 30 phút nó vẫn có thể là một vấn đề lớn. – Artyom

+0

Nói chung, chúng tôi hoặc đặt cookie phiên, chỉ kéo dài cho đến khi trình duyệt thoát hoặc chúng tôi đặt cookie có ngày hết hạn ngày hoặc năm trong tương lai, vì vậy vấn đề múi giờ không phải là vấn đề. –

Trả lời

8
  • Set Max-Age như tất cả mọi người nhưng Microsoft hiểu nó.
  • Thêm Javascript chỉ chạy trên IE để chuyển đổi Độ tuổi tối đa thành UTC theo đồng hồ của trình duyệt và đặt thời gian hết hạn trên cookie. Lưu ý rằng JavaScript không thể đọc tập hợp tuổi tối đa trong cookie, vì vậy bạn sẽ phải cung cấp thông tin đó (cùng với bất kỳ tùy chọn nào khác) cho JavaScript theo một cách khác.

Từ QuirksMode

function readCookie(name) { 
var nameEQ = name + "="; 
var ca = document.cookie.split(';'); 
for(var i=0;i < ca.length;i++) { 
    var c = ca[i]; 
    while (c.charAt(0)==' ') c = c.substring(1,c.length); 
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 
} 
return null; 
} 

Sau đó, sau khi bạn nhận cookie namemaxAgeotherOptions (ví dụ như đường, tên miền) từ một nơi nào:

var date = new Date(); 
date.setTime(date.getTime() + (maxAge * 1000)); 
document.cookie = name + "=" + readCookie(name) + 
    '; expires=' + date.toUTCString() + otherOptions 
2

Nếu tôi có loại này yêu cầu tôi sẽ quản lý các cookie trong ứng dụng của tôi. Bao gồm thời gian máy chủ hết hạn thời gian trong nội dung của cookie, bảo mật cookie bằng mã hóa hoặc băm và từ chối cookie nếu dấu thời gian trong cookie đã trôi qua.

Điều này là khá nhiều cách tự động đăng nhập hết hạn cookie được thực thi.

5

Những gì tôi đã làm là để thay đổi thời gian giữ cho phía máy chủ.Bạn không bao giờ có thể chắc chắn về thời gian ở phía khách hàng, nhưng bạn biết máy chủ của bạn không bao giờ nói dối.

  • Bạn giữ thời gian mà yêu cầu đầu tiên xảy ra trên máy chủ (giữ thời gian máy chủ khi bạn gửi dữ liệu cho mỗi khách hàng), và bạn thiết lập một cookie với một ngày hết hạn tối đa ví dụ: 2900/01/01.
  • Bạn theo dõi thời gian đó và cho phép nói thời gian máy chủ 10 phút bạn quyết định thời gian của mình để tiêu diệt nó.
  • Sau đó, bạn đặt cookie để có ngày tối thiểu sau đó. tức là ngày 01/01/1900. Xóa cookie:
    http://msdn.microsoft.com/en-us/library/ms178195(v=vs.100).aspx
0

Just FYI, IE 11 hỗ trợ Max-Tuổi trên cookie bắt đầu với phiên bản 11.0.15063.0.

Tôi không thể tìm thấy bất kỳ tài liệu nào từ Microsoft để báo cáo điều này, nhưng trong quá trình phát triển, chúng tôi phát hiện phiên bản IE cục bộ của chúng tôi đang hoạt động, nhưng khách hàng thì không. Chúng tôi đã thu hẹp nó xuống một sự khác biệt trong phiên bản IE và thuộc tính Độ tuổi tối đa trên cookie.

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