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
Can subdomain.example.com Ustaw plik cookie, który może być odczytany przez example.com?
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
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