Ustawianie pliku cookie na subdomenie z żądania ajax

Mam webapp na www.example.com i API na api.example.com.

Webapp sprawia, że wywołania ajax do API.

Somewhere I need to put a cookie on api.example.com aby śledzić sesje.

Aby śledzić mój problem, ustawiłem testowe pliki cookie na obu subdomenach z webapp i api. Webapp ustawia plik cookie .exemple.com a api ustawiło jeden .exemple.com i kolejny na api.exemple.com. Pliki Cookies są zapisywane za pomocą Domain=.exemple.com tylko. No path, no HTTPOnly.

Uwaga: w końcu potrzebuję tylko jednego na api.exemple.com ale tezy są do testów.

Bezpośrednie zapytania przy użyciu mojej przeglądarki (Firefox 16) działa dobrze. Zapytanie dotyczące api: dwa pliki cookie są ustawiane i wysyłane. Zapytanie na www: plik cookie jest ustawiony i dwa z api jest wysyłany zbyt. (Pod warunkiem, że zapytam www po api, oczywiście).

Teraz czyszczę ciasteczka przeglądarki i pytam tylko www. Zapytanie na www: działa dobrze, tak samo jak wcześniej. Subquery na api, z żądania ajax www: brak ciasteczek są wysyłane. Set-Cookies nic nie robi. Używając Firebug widzę ciasteczka w odpowiedzi. Ale żadnych śladów po nich na kolejnych żądaniach lub informacjach na stronie.

I event tried to enable the cookies log on Firefox. Absolutnie żadnych śladów plików cookie z api, nawet powiadomienia o odrzuceniu.

W końcu potrzebuję tylko sposobu na przechowywanie jednego pliku cookie w api. I do tego całkiem otwarty:)

Informacje: Dwa serwery to NodeJS. Próbowałem ustawić ciasteczko po stronie serwera (Nagłówek Set-Cookie), po stronie klienta (dokument.cookies), ręcznie za pomocą firebug.

Inne posty sprawdziłem bez rozwiązań (i wiele innych których nie pamiętam):

Ustawianie pliku cookie cross-subdomeny za pomocą javascript

Pliki cookie i subdomeny

Can subdomain.example.com Ustaw plik cookie, który może być odczytany przez example.com?

Author: Community, 2012-10-22

1 answers

Ustaw nagłówek Zezwalaj na poświadczenia w api

Access-Control-Allow-Credentials: true

Użyj withCredentials dla zapytania

$.ajax({
    url: a_cross_domain_url,
    xhrFields: { 
        withCredentials: true 
    }
});

W przeciwnym razie XMLHttpRequest Nie wyśle pliki cookie, niezależnie od nagłówka Access-Control-Allow-Credentials.

Usuń symbol wieloznaczny na Access-Control-Allow-Origin

Access-Control-Allow-Origin: http://www.example.com

Symbol wieloznaczny * nie zadziała. Przeglądarka odrzuci odpowiedź, Jeśli withCredentials Była gotowi.

Bibliografia:

Http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

Https://developer.mozilla.org/en-US/docs/HTTP_access_control

Http://arunranga.com/examples/access-control/credentialedRequest.html

Http://api.jquery.com/jQuery.ajax/

 41
Author: Alexandre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-26 06:24:56