2011-12-08 13 views
7

Ho bookmarklet. Se apro una pagina a caso (non mia) e clicco sul bookmarklet, vorrei verificare se l'utente è loggato sulla mia pagina.Controllo accesso dominio incrociato?

Sto già facendo una richiesta AJAX per il dominio incrociato utilizzando Access-Control-Allow-Origin, ma sembra che non ci sia ID sessione o cookie inviati qui.

C'è un modo per farlo?

+0

Non dimenticare di aggiungere DELETE e PUT ai metodi Access-Control-Allow se si utilizza REST –

risposta

4

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); 
Problemi correlati