Alex è giusto! Ecco la soluzione completa. (Non funziona con IE8 e IE9!)
È necessario impostare withCredentials sul lato client. Dal momento che jQuery 1.5.1 è possibile farlo come mostrato di seguito (Source). Per la versione precedente, seguire lo white rabbit.
$.ajax({
url: a_cross_domain_url,
xhrFields: {
withCredentials: true
}
});
Sul lato server è necessario consentire le opzioni di impostazione, consentire le credenziali e consentire l'origine. L'origine jolly non è consentita! Ma è possibile leggere l'origine dall'intestazione della richiesta :)
// auto adapted Access Control to origin from request header.
$headers = apache_request_headers();
foreach ($headers as $header => $value) {
if ($header == 'Origin')
header('Access-Control-Allow-Origin: ' . $value, true);
}
// send cookies from client
header('Access-Control-Allow-Credentials: true', true);
// allow all methods
header('Access-Control-Allow-Methods: GET, POST, OPTIONS', true);
Non dimenticare di aggiungere DELETE e PUT ai metodi Access-Control-Allow se si utilizza REST –