2015-04-27 15 views
6

mam prosty kod jQuery AJAX postu:Get i przechowywać cookies (z zestawu Cookie) z odpowiedzi 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")); 
    } 
}); 

i życzę, aby uzyskać plik cookie i zapisać go za pomocą cookies-js.

Ale według http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28%29-method:

  1. zwrócić wszystkie nagłówki odpowiedzi, bez nagłówków, które są wielkości liter mecz dla Set-Cookie lub Set-Cookie2, jak pojedynczy ciąg, z każdą linią nagłówka oddzieloną parą U + 000D CR U + 000A LF, z wyłączeniem linii statusu, oraz z każdą nazwą nagłówka i wartością nagłówka oddzieloną parą U + 003A COLON U + 0020 SPACE.

Używając narzędzia sieciowe w Chrome "Set-Cookie" jest widoczny w nagłówkach reagowania. Sprawdziłem również, że nagłówek "Set-Cookie" pojawia się przy użyciu curl.

Co muszę zrobić, aby zapisać plik cookie w mojej aplikacji na przednim panelu? Moja aplikacja działa też tylko pod https.

Chętnie przedstawię więcej szczegółów na życzenie.

Odpowiedz

10

Nie możesz pobrać danych cookie do swojego JS. Interfejs API nie pozwoli Ci.

Co muszę zrobić, aby zapisać plik cookie w mojej aplikacji na przednim panelu?

Wystarczy ustawić nagłówek Set-Cookie w odpowiedzi z kodu po stronie serwera. Przeglądarka powinna zapisać go automatycznie.

Jako programista możesz sprawdzić wartość plików cookie za pomocą "Narzędzi dla programistów".

Ten sam plik cookie zostanie wysłany w kolejnych żądaniach do tej samej domeny, dopóki plik cookie nie wygaśnie.

+0

Jak mogę uzyskać do niego dostęp? 'document.cookie' zwraca niezdefiniowany lub pusty ciąg po zalogowaniu. – ton

+0

Nie uzyskujesz do niego dostępu za pomocą JS. Przeglądarka przechowuje ją w przejrzysty sposób. Serwer uzyskuje do niego dostęp w normalny sposób. – Quentin

+0

Więc to zawsze będzie zawarte we wszystkich moich przyszłych żądaniach AJAX? – ton

5

przeglądarka nie może dać dostęp do 3rd party cookies, jak te otrzymane z Ajax wniosków ze względów bezpieczeństwa, jednak dba o tych, automatycznie dla Ciebie!

Aby to zadziałało musisz:

1) Zaloguj się Ajax żądanie, z którego można oczekiwać ciasteczka zostać zwrócone:

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

2) Połącz z xhrFields: { withCredentials: true } w następnym ajax request (s), aby użyć poświadczeń zapisanych przez przeglądarkę

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

przeglądarka dba o tych ciasteczek dla ciebie, chociaż nie są one czytelne z headers ani document.cookie

patrz moja odpowiedź tutaj: How to get a cookie from an AJAX response?