การตอบกลับ AJAX สามารถตั้งค่าคุกกี้ได้หรือไม่? ถ้าไม่เป็นทางเลือกของฉันคืออะไร ฉันควรตั้งค่าด้วย Javascript หรืออะไรที่คล้ายกัน?
การตอบกลับ AJAX สามารถตั้งค่าคุกกี้ได้หรือไม่? ถ้าไม่เป็นทางเลือกของฉันคืออะไร ฉันควรตั้งค่าด้วย Javascript หรืออะไรที่คล้ายกัน?
คำตอบ:
ใช่คุณสามารถตั้งค่าคุกกี้ในคำขอ AJAX ในรหัสฝั่งเซิร์ฟเวอร์เช่นเดียวกับที่คุณทำกับคำขอปกติเนื่องจากเซิร์ฟเวอร์ไม่สามารถแยกความแตกต่างระหว่างคำขอปกติหรือคำขอ AJAX
คำขอ AJAX เป็นเพียงวิธีพิเศษในการร้องขอไปยังเซิร์ฟเวอร์เซิร์ฟเวอร์จะต้องตอบกลับเช่นเดียวกับคำขอ HTTP ใด ๆ ในการตอบกลับคำขอคุณสามารถเพิ่มคุกกี้ได้
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.
- จากw3.org/TR/XMLHttpRequest
ตามข้อมูลจำเพาะ w3 ส่วน 4.6.3 สำหรับ XMLHttpRequestตัวแทนผู้ใช้ควรเคารพส่วนหัว Set-Cookie ดังนั้นคำตอบคือใช่คุณควรจะสามารถ
คำอ้างอิง:
หากตัวแทนผู้ใช้สนับสนุนการจัดการสถานะ HTTP ควรคงอยู่ให้ทิ้งและส่งคุกกี้ (ตามที่ได้รับในส่วนหัวการตอบสนองของ Set-Cookie และส่งในส่วนหัวของคุกกี้) ตามความเหมาะสม
สำหรับเรคคอร์ดโปรดทราบว่าสิ่งที่กล่าวมาทั้งหมดนี้ยังคงเป็นจริงต่อเมื่อมีการโทร AJAX บนโดเมนเดียวกัน หากคุณกำลังมองหาในการตั้งค่าคุกกี้บนโดเมนอื่นใช้ AJAX คุณกำลังเปิดที่แตกต่างกันโดยสิ้นเชิงสามารถของเวิร์ อย่างไรก็ตามการอ่านคุกกี้ข้ามโดเมนใช้งานได้ (หรืออย่างน้อยเซิร์ฟเวอร์จะให้บริการพวกเขาหรือไม่ว่า UA ของลูกค้าของคุณจะอนุญาตให้รหัสของคุณเข้าถึงพวกเขาคืออีกครั้งหัวข้อที่แตกต่างกัน;
withCredentials=true
สำหรับxhr
วัตถุ (2) ตั้งค่าAccess-Control-Allow-Credentials
ทั้งสองในคำขอ preflight OPTIONS เช่นเดียวกับคำขอจริง (3) ตั้งค่าคุกกี้ตามต้องการ
ตรวจสอบด้วยว่าเซิร์ฟเวอร์ของคุณไม่ได้ตั้งค่าคุกกี้ที่ปลอดภัยในคำขอ http ที่ไม่ใช่ เพิ่งพบว่าคำขอ ajax ของฉันได้รับเซสชัน php ด้วยชุด "ปลอดภัย" เนื่องจากฉันไม่ได้อยู่บน https จึงไม่ได้ส่งคุกกี้เซสชันกลับมาและเซสชันของฉันได้รับการรีเซ็ตตามคำขออาแจ็กซ์แต่ละครั้ง