2011-09-12 28 views
7

Tôi có một iframe rằng:ie9 mất cookie sau chuyển hướng

  1. hiện một yêu cầu bưu điện đến máy chủ
  2. máy chủ trả 302 và thiết lập Cookie
  3. trình duyệt không lưu các tập tin cookie nhưng không một bài (không biết tại sao không nhận được nhưng nó không quan trọng)
  4. cookie từ # 3 bị mất

tôi đã tìm thấy một workaround:

Response.AddHeader("Pragma", "no-cache"); 
Response.AddHeader("Cache-Control", "no-cache"); 

nhưng không hiệu quả. mb ai biết điều gì có thể khắc phục vấn đề này?

+0

Bài đăng này dường như trả lời câu hỏi này: http://stackoverflow.com/questions/389456/cookie-blocked-not-saved-in-iframe-in-internet-explorer – sammcd

Trả lời

11

Bạn có thể muốn xem xét lý do khiến trình duyệt của bạn đang thực hiện POST thay vì GET, vì điều đó ngụ ý rằng có một phần thông tin quan trọng mà bạn đã bỏ qua. Sẽ không có trình duyệt nào follow a HTTP/302 redirect with a POST.

Trong IE9, redirection responses are cached nếu tiêu đề cho phép (IE8 trở xuống sẽ không chuyển hướng bộ nhớ cache).

Bạn hoàn toàn có thể đặt cookie trên chuyển hướng 302. Có hai khả năng ở đây:

  1. Cookie của bạn bị giảm vì bạn không cung cấp tiêu đề P3P cho phản hồi cho thấy thực tiễn bảo mật của bạn tương thích với mong muốn của người dùng.
  2. Phản hồi chuyển hướng của bạn bị kéo ra khỏi bộ nhớ cache của người dùng, không phải máy chủ và phản hồi được lưu trong bộ nhớ cache đã không đặt cookie.

Do bạn gặp sự cố này trong IFRAME, số 1 dường như có nhiều khả năng hơn. (Xem Quick Look at P3P)

+0

nhưng tại sao tất cả mọi thứ là ok wih cookie trong ff , chrome và opera? họ lưu cookie và chuyển hướng với get. – donRumatta

+1

Tôi đã có cùng một vấn đề, và giải quyết nó một cách dễ dàng bằng cách thêm một tiêu đề P3P như mô tả. Để có giải thích đầy đủ, hãy xem http://msdn.microsoft.com/en-us/library/ms537341.aspx, nhưng nếu bạn chỉ muốn sửa nhanh, hãy thêm tiêu đề này vào phản hồi 302 của bạn: 'P3P: CP =" NOI ADM DEV PSAi COM NAV CỦA CHÚNG TÔI OTR STP IND DEM "' – nitwit

+3

Chỉ IE hỗ trợ P3P. Trước khi thêm tiêu đề như nhận xét trước cho thấy, bạn phải đảm bảo rằng các xác nhận quyền sở hữu mà bạn đang thực hiện với tiêu đề đó là chính xác hoặc bạn có trách nhiệm bị kiện vì đưa ra tuyên bố sai về thực tiễn bảo mật của mình. – EricLaw

0

Tôi không biết nếu bạn đã từng tìm ra điều này, nhưng hãy đảm bảo bạn đang hướng dẫn ứng dụng của mình không đặt cookie của khách hàng. Trong CF, có một tham số ứng dụng 'setClientCookies', khi thiết lập nó thành false đảm bảo những gì bạn mô tả không xảy ra. (Thật trùng hợp, đặt nó thành 'sai' hoặc 'không' không hoạt động khi mà CF thường nhận ra điều này là sai.)

1

Để mở rộng câu trả lời của EricLaw về câu trả lời chuyển hướng bộ nhớ đệm của IE 9, hãy xem trang này:

http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx

Ngoài ra, có một điều cần lưu ý về các cache chuyển hướng phản ứng là có thực sự là không có cách nào dễ dàng để xóa chúng ra. Xóa bộ nhớ cache và cookie để chúng ở đúng vị trí. Có 2 lựa chọn:

  • Đi vào IE 9 Chế độ Private
  • Sử dụng Fiddler để xóa bộ nhớ cache Wininet (dưới Công cụ)
2

bài này có thể là muộn một chút, nhưng gần đây tôi đã xử lý vấn đề cụ thể này cho một ứng dụng Grails. Nhiều năm trước, vấn đề tương tự đã xảy ra trong một ứng dụng web Java mà tôi đã tạo ra khi Internet Explorer đang chặn cookie (cài đặt bảo mật). Để cho phép ứng dụng web Java và JavaScript ghi cookie trong trang chính hoặc IFRAME trong Internet Explorer, chính sách bảo mật đã được gửi từ ứng dụng web.Microsoft vẫn hỗ trợ định dạng chính sách bảo mật được gọi là Platform for Privacy Preferences (P3P). Định dạng này dường như không được hỗ trợ trong các trình duyệt hiện đại khác, nhưng nó giúp khắc phục các vấn đề về cookie của IE. Mặc dù có mối quan tâm với hỗ trợ của IE 10 về P3P, tôi đã thử nghiệm thành công các cài đặt P3P sau với sự xác nhận hợp lệ.

1) Xác định các danh mục bắt buộc cho ứng dụng của bạn. Đối với ứng dụng của tôi, tương tác, navigationUniqueID loại đã được yêu cầu cho hoạt động tốt. Các mã Chính sách Nhỏ gọn được liệt kê trên trang đặc điểm P3P

Category  Compact 
--------  ------- 
interactive => INT 
navigation => NAV 
uniqueid => UNI 

2) Xác định xem chính sách nhỏ gọn có hoạt động không. Đối với ứng dụng của tôi, tiêu đề chính sách nhỏ gọn là đủ. Nếu bạn yêu cầu tệp chính sách, vui lòng xem lại một số tệp mẫu tại đây: http://p3pbook.com/examples.html.

3) Mã bên dưới là một ví dụ rất đơn giản, nhưng vẫn minh họa các bước cần thực hiện.

HttpServletResponse response = (HttpServletResponse) res; 

String policySettings = policyFileExists ? "policyref='" + policyFilePath + "', " : ""; 

policySettings += "CP='INT NAV UNI'"; 

response.setHeader("P3P", policySettings); 

Bạn chắc chắn có thể thực hiện các bước tương tự trong các công nghệ khác, chẳng hạn như PHP và ASP.NET. Tôi hy vọng điều này ít nhất sẽ giúp hướng mọi người đi đúng hướng để giải quyết vấn đề về cookie của IE.

0

Bạn có thể muốn kiểm tra cài đặt Expire vs. Max-Age trên cookie của mình. IE sẽ không xem xét Max-Age (có thể những cái mới hơn, nếu không có Expire được đưa ra?), Nhưng họ sẽ xem xét thời gian địa phương và so sánh nó với ngày hết hạn. Nếu giờ địa phương là trong tương lai hoặc máy chủ có ngày trong quá khứ, cookie sẽ được coi là đã hết hạn và sẽ không được gửi theo yêu cầu tiếp theo.

Tôi cũng nhận thấy rằng ngay cả khi IE9 sẽ cho bạn biết trong giao diện nhà phát triển rằng nó thực hiện POSt, nó thực sự thực hiện GET sau khi chuyển hướng 302. Như một lưu ý, toàn bộ 302 điều là một chút sai lầm và các trang web bạn nên 303 và 307, nhưng anyway.

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