Phản hồi AJAX có thể đặt cookie không? Nếu không, giải pháp thay thế của tôi là gì? Tôi có nên thiết lập nó với Javascript hoặc một cái gì đó tương tự?
Phản hồi AJAX có thể đặt cookie không? Nếu không, giải pháp thay thế của tôi là gì? Tôi có nên thiết lập nó với Javascript hoặc một cái gì đó tương tự?
Câu trả lời:
Có , bạn có thể đặt cookie trong yêu cầu AJAX theo mã phía máy chủ giống như bạn làm cho một yêu cầu bình thường vì máy chủ không thể phân biệt giữa yêu cầu bình thường hoặc yêu cầu AJAX.
Yêu cầu AJAX chỉ là một cách đặc biệt để yêu cầu máy chủ, máy chủ sẽ cần phản hồi lại như trong bất kỳ yêu cầu HTTP nào. Trong phản hồi của yêu cầu, bạn có thể thêm cookie.
If the user agent supports HTTP State Management it should persist, discard and send cookies (as received in the Set-Cookie response header, and sent in the Cookie header) as applicable.
- từ w3.org/TR/XMLHttpRequest
Theo phần đặc tả w3 4.6.3 cho XMLHttpRequest, một tác nhân người dùng nên tôn trọng tiêu đề Set-Cookie. Vì vậy, câu trả lời là có, bạn sẽ có thể.
Bảng báo giá:
Nếu tác nhân người dùng hỗ trợ Quản lý trạng thái HTTP, thì nó vẫn tồn tại, loại bỏ và gửi cookie (như đã nhận được trong tiêu đề phản hồi Set-Cookie và gửi trong tiêu đề Cookie) nếu có.
Đối với bản ghi, lưu ý rằng tất cả những điều trên chỉ đúng (nếu) chỉ khi cuộc gọi AJAX được thực hiện trên cùng một tên miền. Nếu bạn đang xem xét việc đặt cookie trên một tên miền khác bằng AJAX, thì bạn đang mở một hộp giun hoàn toàn khác . Tuy nhiên, đọc cookie tên miền chéo vẫn hoạt động (hoặc ít nhất là máy chủ phục vụ chúng; liệu UA của khách hàng của bạn có cho phép mã của bạn truy cập vào chúng hay không, lại là một chủ đề khác; kể từ năm 2014 chúng làm).
withCredentials=true
cho xhr
đối tượng (2) Đặt Access-Control-Allow-Credentials
cả hai trong yêu cầu chọn trước TÙY CHỌN cũng như yêu cầu thực tế (3) Đặt cookie khi cần
Đồng thời kiểm tra xem máy chủ của bạn không đặt cookie an toàn theo yêu cầu không http. Chỉ cần phát hiện ra rằng yêu cầu ajax của tôi đã nhận được một phiên php với bộ "an toàn". Vì tôi không ở trên https nên nó đã không gửi lại cookie phiên và phiên của tôi đang được đặt lại theo từng yêu cầu ajax.