Bisakah respons AJAX mengatur cookie? Jika tidak, apa solusi alternatif saya? Haruskah saya mengaturnya dengan Javascript atau yang serupa?
Bisakah respons AJAX mengatur cookie? Jika tidak, apa solusi alternatif saya? Haruskah saya mengaturnya dengan Javascript atau yang serupa?
Jawaban:
Ya , Anda dapat mengatur cookie dalam permintaan AJAX dalam kode sisi server seperti yang Anda lakukan untuk permintaan normal karena server tidak dapat membedakan antara permintaan normal atau permintaan AJAX.
Permintaan AJAX hanyalah cara khusus untuk meminta ke server, server harus merespons kembali seperti dalam permintaan HTTP apa pun. Sebagai tanggapan atas permintaan Anda, Anda dapat menambahkan 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.
- dari w3.org/TR/XMLHttpRequest
Menurut bagian spesifikasi w3 4.6.3 untuk XMLHttpRequest agen pengguna harus menghormati header Set-Cookie. Jadi jawabannya adalah ya, Anda harus bisa.
Kutipan:
Jika agen pengguna mendukung Manajemen Status HTTP, agen pengguna harus bertahan, membuang dan mengirim cookie (seperti yang diterima di tajuk respons Set-Cookie, dan dikirim dalam tajuk Cookie) sebagaimana berlaku.
Sebagai catatan, maklum bahwa semua hal di atas (masih) benar hanya jika panggilan AJAX dilakukan pada domain yang sama. Jika Anda mencari pengaturan cookie di domain lain menggunakan AJAX, Anda membuka kaleng cacing yang sama sekali berbeda . Namun, membaca cookie lintas-domain tidak berfungsi (atau setidaknya server menyajikannya; apakah UA klien Anda memungkinkan kode Anda untuk mengaksesnya, sekali lagi, merupakan topik yang berbeda; pada 2014 mereka melakukannya).
withCredentials=true
untuk xhr
objek (2) Tetapkan Access-Control-Allow-Credentials
baik dalam permintaan preflight OPSI maupun permintaan yang sebenarnya (3) Tetapkan cookie sesuai kebutuhan
Juga periksa apakah server Anda tidak mengatur cookie aman berdasarkan permintaan non http. Baru tahu bahwa permintaan ajax saya mendapatkan sesi php dengan set "aman". Karena saya tidak menggunakan https, itu tidak mengirimkan kembali cookie sesi dan sesi saya diset ulang pada setiap permintaan ajax.