Saya beroperasi dalam skenario lintas-domain. Selama login server jauh mengembalikan header Set-Cookie bersama dengan Access-Control-Allow-Credentials
set ke true.
Panggilan ajax berikutnya ke server jauh harus menggunakan cookie ini.
CORS Access-Control-Allow-Credentials
ada untuk memungkinkan penebangan lintas domain. Periksa https://developer.mozilla.org/En/HTTP_access_control untuk contoh.
Bagi saya sepertinya ada bug di JQuery (atau paling tidak fitur-to-be di versi berikutnya).
MEMPERBARUI:
Cookie tidak diatur secara otomatis dari respons AJAX (kutipan: http://aleembawany.com/2006/11/14/anatomy-of-a-well-designed-ajax-login-experience/ )
Mengapa?
Anda tidak bisa mendapatkan nilai cookie dari respons untuk mengaturnya secara manual ( http://www.w3.org/TR/XMLHttpRequest/#dom-xmlhttprequest-getresponseheader )
Saya bingung..
Seharusnya ada cara untuk meminta jquery.ajax()
untuk mengatur XMLHttpRequest.withCredentials = "true"
parameter.
JAWABAN:
Anda harus menggunakan xhrFields
param dari http://api.jquery.com/jQuery.ajax/
Contoh dalam dokumentasi adalah:
$.ajax({
url: a_cross_domain_url,
xhrFields: {
withCredentials: true
}
});
Penting juga bahwa server menjawab dengan benar permintaan ini. Menyalin komentar hebat di sini dari @ Frédéric dan @Pebbl:
Important note: when responding to a credentialed request, server must specify a domain, and cannot use wild carding. The above example would fail if the header was wildcarded as: Access-Control-Allow-Origin: *
Jadi ketika permintaannya adalah:
Origin: http://foo.example
Cookie: pageAccess=2
Server harus merespons dengan:
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Credentials: true
[payload]
Kalau tidak, payload tidak akan dikembalikan ke skrip. Lihat: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials