2017-12-05 84 views
8

Praca z projektem, w którym wykorzystuje się plik cookie do identyfikacji użytkownika.Przeglądarka nie wysyła plików cookie w kolejnym żądaniu.

Kiedy użytkownik dotrze, wywołuje usługę (który jest uruchomiony w localhost) oraz usługę wysyłania cookie z nagłówka odpowiedzi wygląda następująco:

curl 'http://127.0.0.1:8000/api/v1.0/tracking' -X OPTIONS -H 'Access-Control-Request-Method: POST' -H 'Origin: http://local.com:8080' -H 'Access-Control-Request-Headers: content-type,x-forwarded-for' --compressed 

Nagłówek reakcja wygląda następująco:

HTTP/1.1 200 OK 
Connection: keep-alive 
Keep-Alive: 60 
Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, x-forwarded-for 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, PATCH, GET 
Content-Length: 0 
Content-Type: text/plain; charset=utf-8 
Set-Cookie: id=random_id_123_123; expires=Wed, 06-Dec-2017 10:57:36 GMT; Domain=.local.com; Path=/ 

a następnie po upływie określonego działania użytkownika, aplikacja wysyła następujące żądanie API:

curl 'http://127.0.0.1:8000/api/v1.0/tracking?event=video_added&user_id=123123123' -H 'Origin: http://local.com:8080' -H 'Accept: */*' -H 'Referer: http://local.com:8080/' -H 'Connection: keep-alive' --compressed 

nagłówku żądania dla powyższego wniosku wygląda jak poniżej:

GET api/v1.0/tracking?event=video_added&user_id=123123123 HTTP/1.1 
Host: 127.0.0.1:8000 
Connection: keep-alive 
Accept: */* 
Origin: http://local.com:8080 
User-Agent: My user agent 
Referer: http://local.com:8080/ 
Accept-Encoding: gzip, deflate, br 
Accept-Language: en-US,en;q=0.9 

Spodziewałem cookie (random_id_123_123) być otrzymane z pierwszego wniosku jako nagłówku odpowiedzi byłby nagłówek wniosek o drugą prośbę.

Witryna działa na: http://local.com:8080 (która faktycznie działa na komputerze lokalnym i mojej konfiguracji vhost wskazując 127.0.0.1 local.com) i jest obsługiwana przez python SimpleHTTPServer.

Usługa wewnętrzna, która ustawia ciasteczko działa również na porcie 8000 w localhost. Wygląda na to, że coś przeoczyłem podczas realizacji. Co to jest?

Edytuj: Oto code.

+0

Byłoby naprawdę trudno nam powiedzieć * jeśli nie dodawać żadnego kodu * –

+0

@MatiasCicero Dodałem link do kodu. –

Odpowiedz

5

Twoim problemem jest to, że pliki cookie są wysyłane tylko na podstawie domeny. Twój kod ma

var settings = { 
    "crossDomain": true, 
    "url": "http://127.0.0.1:8000/api/v1.0/tracking?event=video_added&tracking_id=123123123", 
    "method": "GET", 

} 

URL jest 127.0.0.1:8000 i powinno być local.com:8000 jeśli chcesz ciasteczka mają być przekazywane.

+0

Edytowane pytanie. Usługa, która ustawia ciasteczko działa w wersji 127.0.0.1:8000, a strona internetowa, która wywołuje API, działa w wersji 127.0.0.1:8080. –

+0

Zobacz ten wątek https://stackoverflow.com/questions/1612177/are-http-cookies-specific. Jeśli przeglądasz go jako 'local.com: 8080' w przeglądarce, to api powinien również używać' local.com: 8000', ponieważ nawet jeśli 'local.com' wskazuje' 127.0.0.1', nie są one takie same, jeśli chodzi o dzielenie się plikami cookie –

+0

Również jeśli chcesz, możesz nawet usunąć 'response.cookies [" id "] [" domain "] =" .local.com "' i to też powinno ci pomóc . –

1

Po ostatnim sprawdzeniu zwijanie nie ma domyślnie włączonych plików cookie.

Aby to zrobić trzeba będzie:

  • użyć parametru -b/ścieżka/do/cookiejar czytać pliki cookie.
  • Użyj parametru -c/path/do/cookiejar, aby pisać pliki cookie.

więc wnioski powinny stać się:

curl -c cookiejar 'http://127.0.0.1:8000/api/v1.0/tracking' \ 
-X OPTIONS -H 'Access-Control-Request-Method: POST' \ 
-H 'Origin: http://local.com:8080' \ 
-H 'Access-Control-Request-Headers: content-type,x-forwarded-for' \ 
--compressed 

oraz:

curl -b cookiejar 'http://127.0.0.1:8000/api/v1.0/tracking?event=video_added&user_id=123123123' \ 
-H 'Origin: http://local.com:8080' \ 
-H 'Accept: */*' \ 
-H 'Referer: http://local.com:8080/' \ 
-H 'Connection: keep-alive' --compressed 
Powiązane problemy