2012-06-11 44 views
15

tôi nghĩ rằng tôi đã hiểu lầm việc quản lý cookie bằng xmlhttprequest. Tôi có một máy chủ đáp ứng với XMLHttpRequest được thực hiện bằng javascript, máy chủ của tôi trả về các tiêu đề Allow-Control-Access-Origin, Access-Control-Allow-Headers, Access-Control-Expose-HeadersAccess-Control-Allow-Credentials với giá trị chính xác.xmlhttprequest và set-cookie & cookie

Tôi đang thực hiện xác thực thông báo trong máy chủ có javascript, không có vấn đề gì, tôi nhận được tiêu đề WWW-Authenticate từ máy chủ, tôi xử lý và gửi tới máy chủ tiêu đề Cấp phép với tất cả phản hồi và mọi thứ đều ổn . Vấn đề là, khi thử thách tiêu hóa thành công, máy chủ của tôi trả về Tiêu đề Set-Cookie, tôi phải lấy nó và thêm vào phần còn lại của tất cả yêu cầu xhr của tôi. Trình duyệt (sử dụng Chromium và Chrome) không cho phép tôi tiếp cận với tiêu đề làm:

xhr.getResponseHeader("Set-Cookie"); 

Ok, trong XMLHTTPREQUEST Level 2 nó nói: "Trả bài tiêu đề từ các phản ứng, ngoại trừ những người có trường tên là Set-Cookie hoặc Set-Cookie2 " Ok, vì vậy tôi không thể lấy nó, nhưng cách thức là gì? Sử dụng Chrome Api cho cookie (tại thời điểm này tôi không đọc lưu ý về nó), nhưng tôi muốn làm một cách tiêu chuẩn như posible. Với:

xhr.withCredentials = true; 

có nghĩa là trình duyệt tự động nhận cookie đặt và gửi trong tiêu đề cookie ??

Trả lời

16

Từ CORS đặc tả http://www.w3.org/TR/cors/#make-a-request-steps:

Bất cứ khi nào làm một bước yêu cầu được áp dụng, lấy URL yêu cầu từ nguồn gốc xuất xứ với hướng dẫn chuyển hướng lá cờ thiết lập, và khối cookie cờ thiết lập nếu các chứng chỉ omit cờ được đặt. Sử dụng phương thức yêu cầu phương thức, phần thân thực thể yêu cầu đối tượng, bao gồm tiêu đề yêu cầu tác giả và bao gồm thông tin xác thực người dùng nếu cờ thông tin xác thực bỏ qua không được đặt. Loại trừ tiêu đề Người giới thiệu nếu nguồn gốc là số nhận dạng duy nhất toàn cầu.

Như bạn đã nói chính xác - cookie được trình duyệt thêm vào nếu bạn sử dụng withCredentials.

+0

bạn có thể xác nhận rằng trong trường hợp này, họ đang gửi cookie, được tạo và đặt bởi trang A (trang chính) đến trang B (đích Ajax)? –

+0

Không. Chỉ những cookie có nguồn gốc từ tên miền B mới được gửi đến đó. Mặt khác, 'Referer' sẽ được gửi chứa URI gốc của site A - và nếu bạn có một số tham số HTTP - chúng sẽ hiển thị trên trang B. –

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