2015-04-27 8 views
6

Ho un semplice codice jQuery AJAX POST:Prendi e memorizzare dei cookie (da Set-Cookie) da una risposta AJAX POST

$.ajax({ 
    type: "POST", 
    url: AppConstants.URLs.PROXY, 
    data: message, 
    xhrFields: { 
     withCredentials: true 
    }, 
    success: function(data, status, xhr) { 
     console.log("Cookie: " + xhr.getResponseHeader("Set-Cookie")); 
    } 
}); 

e mi auguro di ottenere il cookie e salvarlo utilizzando cookies-js.

Ma secondo http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28%29-method:

  1. ritorno tutte le intestazioni di risposta, escludendo le intestazioni che sono una corrispondenza case-insensitive per Set-Cookie o Set-Cookie2, come una singola stringa, con ogni riga di intestazione separata da una coppia U + 000D CR U + 000A LF, esclusa la riga di stato e con ciascun nome di intestazione e valore di intestazione separati da una coppia U + 003A COLON U + 0020 SPACE.

Utilizzando lo strumento Rete in Chrome, "Set-cookie" è visibile nelle intestazioni di risposta. Ho anche verificato che l'intestazione "Set-Cookie" venga visualizzata utilizzando curl.

Cosa devo fare per salvare il cookie nella mia app di front end? Inoltre, la mia app è in esecuzione su https.

Sarei lieto di fornire ulteriori dettagli su richiesta.

risposta

10

Non è possibile ottenere i dati dei cookie nel proprio JS. L'API non ti consente.

Cosa devo fare per salvare il cookie nella mia app di front end?

Basta impostare l'intestazione Set-Cookie nella risposta dal codice lato server. Il browser dovrebbe salvarlo automaticamente.

Come sviluppatore, potresti essere in grado di ispezionare il valore dei cookie utilizzando "Strumenti per sviluppatori".

E lo stesso cookie verrà inviato in richieste successive allo stesso dominio, fino alla scadenza del cookie.

+0

Come posso accedervi? 'document.cookie' restituisce una stringa non definita o vuota quando loggata. – ton

+0

Non accedi affatto con JS. Il browser lo memorizza in modo trasparente. Il server accede normalmente. – Quentin

+0

Quindi sarà sempre incluso in tutte le mie future richieste AJAX? – ton

5

Il navigatore non può dare l'accesso ai cookie 3rd party come quelli ricevuti da richieste Ajax per motivi di sicurezza, tuttavia si prende cura di quelli automaticamente per voi!

Per far funzionare tutto questo è necessario:

1) effettuare il login con la richiesta ajax da cui ci si aspetta cookie da restituire:

$.ajax("https://example.com/v2/login", { 
    method: 'POST', 
    data: {login_id: user, password: password}, 
    crossDomain: true, 
    success: login_success, 
    error: login_error 
    }); 

2) Collegare con xhrFields: { withCredentials: true } nel prossimo richiesta AJAX (s) per utilizzare le credenziali salvate dal browser

$.ajax("https://example.com/v2/whatever", { 
    method: 'GET', 
    xhrFields: { withCredentials: true }, 
    crossDomain: true, 
    success: whatever_success, 
    error: whatever_error 
    }); 

Il browser si prende cura di questi biscotti per voi anche se non sono leggibili dal headers né il document.cookie

vedere la mia risposta qui: How to get a cookie from an AJAX response?

Problemi correlati