2011-11-28 33 views
11

Chúng tôi có nhiều bản sao của ứng dụng web được triển khai trên nhiều đường dẫn trên cùng một tên miền.
Ví dụ:Internet Explorer gửi sai cookie khi đường dẫn chồng lên nhau

Mỗi trường hợp duy trì một tập hợp các tập tin cookie mỗi một định nghĩa của nó path như "/" + .getWebDirRoot() - ví dụ: /abc, /xyz, /abc123

Khi thực hiện dòng sau:

Bước cuối cùng không thành công ince IE gửi cho chúng tôi cookie không chính xác - nó sẽ gửi cho http://mydomain.com/abc thay vì một cho http://mydomain.com/abc123

Điều này không xảy ra trong FireFox. (Và tôi đã không thử bất kỳ trình duyệt nào khác).

Đây có phải là hành vi đã biết của IE (Tôi đã thử nghiệm IE9IE8)?
Có cách nào để khắc phục nó (theo cách có lập trình) không?

Lưu ý: Chỉ cần làm rõ, điều này không xảy ra khi chuyển đổi từ http://mydomain.com/abc để http://mydomain.com/xyz - hành vi bị nghiêm cấm để dòng chảy nơi currentUrl.startswith(urlAssociatedWithCookie) == true

Tôi đã kiểm tra các hành vi sử dụng Fiddler - Tôi thấy rõ HTTP yêu cầu cho abc123 được gửi với giá trị của cookie thuộc về abc.

Tôi cũng đã kiểm tra các cookie trên FireFox và chúng như mong đợi - một cookie được tạo trên mỗi đường dẫn.

Trả lời

19

Sau khi điều tra cho hơn một ngày và tìm kiếm khắp mọi nơi cho đặc điểm kỹ thuật về hành vi của IE tôi đã đưa ra không có gì - ngoài sự hiểu biết rằng khi IE thấy một cookie từ miền xyz và đường dẫn abc, nó sẽ gửi nó trên bất kỳ yêu cầu gửi cho bất kỳ URL nào bắt đầu bằng cùng một tên miền và đường dẫn, ví dụ: `http://xyz/abc123 '.

Vì vậy, cuối cùng những gì tôi đã làm là thay đổi tạo ra cookie của tôi, và thay vì:

Name: mycookie 
Path: /abc 

bây giờ tôi tạo như sau:

Name: mycookie 
Path: /abc/ 

này đã giải quyết được vấn đề không có ricochetes - cookie là đã lưu thành công trên máy khách và cookie chính xác luôn được gửi đến máy chủ.


Lưu ý: Tôi đã kiểm tra RFC for HTTP Cookies và thấy điều này:

Yêu cầu-đường path-phù hợp với một trao cookie đường dẫn nếu ít nhất một trong
các điều kiện sau giữ:

o Đường dẫn cookie và đường dẫn yêu cầu giống hệt nhau.

o Đường dẫn cookie là tiền tố của đường dẫn yêu cầu và ký tự cuối cùng của đường dẫn cookie là% x2F ("/") cuối cùng là .

o Đường dẫn cookie là tiền tố của đường dẫn yêu cầu và ký tự đầu tiên của đường dẫn yêu cầu không được bao gồm trong đường dẫn cookie- là ký tự% x2F ("/").

Kịch bản mà lẽ ra phải áp dụng ở đây là lần thứ 3, nhưng có vẻ như IE không tuân thủ RFC về trường hợp này ...

+0

Cám ơn một cuộc điều tra kỹ lưỡng. Biết được điều này có lẽ sẽ giúp tôi tiết kiệm rất nhiều kịch tính trong tương lai. –

+0

Điều đó cũng xảy ra với tôi (và lấy cùng một kết luận). Cảm ơn bạn đã tiết kiệm thời gian để tìm thông số kỹ thuật và mô tả về lỗi trong IE! – helios

+3

Đối với mọi người triển khai trên Apache Tomcat: Bắt đầu với Tomcat7 Tomcat tự động thêm dấu gạch chéo ("/") vào đường dẫn cookie để tránh sự cố này. Bạn có thể vô hiệu hóa tính năng này trong 'context.xml' của bạn bằng cách thiết lập' sessionCookiePathUsesTrailingSlash = false' (xem http://tomcat.apache.org/tomcat-7.0-doc/config/context.html) –

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