2008-10-07 14 views
10

Tôi không thể lấy Cookie maxage nó luôn luôn trả về -1Cookie getMaxAge

Tạo cookie:

Cookie securityCookie = new Cookie("sec", "somevalue"); 
securityCookie.setMaxAge(EXPIRATION_TIME); 

Lấy cookie:

Cookie[] cookies = request.getCookies(); 
if (cookies != null) { 
    for(int i=0; i<cookies.length; i++) { 
     Cookie cookie = cookies[i]; 
     if ("sec".equals(cookie.getName())){ 
      int age = cookie.getMaxAge(); 
     } 
    } 
} 

tôi luôn luôn nhận được tuổi = -1

cũng khi tôi kiểm tra hết hạn cookie firefox tôi thấy ngày lạ.

Thx

+0

Bạn đã vượt qua vấn đề này như thế nào? Tôi đang đấu tranh với cùng một vấn đề chính xác và tôi không thấy bất kỳ câu trả lời nào. –

+0

câu trả lời của @Bruno De Fraine là hợp lệ, vui lòng đọc phần bên dưới chủ đề – Jeevanantham

Trả lời

1

API nói rằng -1 có nghĩa là cho đến khi trình duyệt đang chạy:

Trả về độ tuổi tối đa của cookie, quy định chỉ trong vài giây, Theo mặc định, -1 cho thấy cookie sẽ kéo dài cho đến khi tắt trình duyệt

Giá trị của EXPIRATION_TIME là bao nhiêu?

+0

Bạn chỉ sử dụng thông số tuổi cookie khi bạn tạo cookie để gửi đối tượng phản hồi. API đang đề cập đến việc tạo cookie. Đối tượng "Cookie" tương tự cũng được sử dụng để đóng gói dữ liệu trong yêu cầu, nhưng yêu cầu không gửi bất kỳ tham số "tuổi" nào. Quá xấu không có các đối tượng khác nhau cho SET và GET (song song với các tiêu đề HTTP khác nhau Cookie: và Set-Cookie. – ChrisCantrell

0

Giá trị có thể được sửa đổi bởi trình duyệt.

Bạn tạo cookie và muốn đặt độ tuổi tối đa. Cookie được gửi đến trình duyệt. Trình duyệt có thể từ chối cookie hoặc bỏ qua độ tuổi tối đa quá dài cho chính sách của nó. Cookie được sửa đổi này được gửi lại cho ứng dụng của bạn.

Kiểm tra cài đặt trình duyệt của bạn.

0

Chỉ dành cho nụ cười, bạn có thể lấy giá trị của cookie từ trình duyệt bằng javascript không?

Ngoài ra, bạn có thể đặt bộ lọc trước servlet/jsp để có thể kiểm tra giá trị của cookie sau khi servlet/jsp đặt nó không?

12

Khi trình duyệt gửi cookie trở lại máy chủ gốc, trình duyệt sẽ không bao gồm bất kỳ độ tuổi nào. Vì vậy, nó là hợp lý mà bạn "lấy" mã ở trên không nhận được một độ tuổi tối đa: nó không được bao gồm trong yêu cầu.

Khi nhận được cookie từ máy chủ, trình duyệt sử dụng tham số độ tuổi tối đa để xác định thời gian lưu giữ cookie; tuổi tác không bao giờ được truyền lại cho máy chủ, một cookie hết hạn chỉ đơn giản là bị loại bỏ. Khi xử lý yêu cầu, nếu bạn muốn gia hạn tuổi của cookie, hãy bao gồm cookie trong phản hồi.

Cũng xem phần "Gửi cookie đến máy chủ nguồn gốc" trong RFC.

+2

Nói cách khác, trình duyệt không chia sẻ maxAge với bạn. Bạn không biết. Lấy làm tiếc. –