2017-12-06 5 views
0

Ich versuche, ein Cookie in meinem Browser mit einem Python Flask-Backend zu setzen, aber wenn wir die Set-Cookie-Funktion aufrufen, kann ich nicht beobachten, dass der Cookie vom Browser gespeichert wird. Im Folgenden ist mein gegenwärtiges Verständnis darüber, wie diese funktionieren soll:Cookies nicht im Browser gespeichert

  • Cookies sind nur Schlüssel-Wert-Paare, die ein Ablauf haben können, die sie hartnäckig macht, sonst verfallen sie, wenn der Browser geschlossen wird
  • a einzustellen cookie ist es notwendig, den set-cookie-Header in der Antwort zu verwenden. Ich rufe die Methode set_cookie des flask response-Objekts dazu auf.
  • der Browser automatisch das Cookie speichern soll und die Ablaufregeln folgen

machen die Anfrage in Angular Httpclient

let headers = new Headers(); 
headers.append('Content-Type', 'application/json'); 
let options = new RequestOptions({ headers: headers, withCredentials: true }); 
const request_data = {'username': this.username, 'password': this.password}; 
this.http.post('http://localhost:8080/token', request_data, options) 

Einstellung (der set_cookie Header kann in der vom Browser empfangene Antwort beobachtet werden) das Cookie in Python Flask

g.response = make_response() 
time = datetime.datetime.now() + datetime.timedelta(days=30) 
g.response.set_cookie("auth_token", auth.token, expires=time) 
return g.response 

Plain Text Antwort im Browser

HTTP/1.1 200 OK 
set-cookie: auth_token=7253f2fa43d7584741dcf8972dea8f; Expires=Fri, 05-Jan-2018 01:33:30 GMT; Path=/ 
vary: Origin 
access-control-allow-credentials: true 
access-control-allow-origin: http://127.0.0.1:4200 
content-type: application/json 
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
Cache-Control: no-cache 
Content-Length: 58 
Server: Development/2.0 
Date: Wed, 06 Dec 2017 01:33:30 GMT 

Cookies Abschnitt des Browsers screenshot of no cookies being saved

Andere Gedanken & Beiträge erforscht:

Frage:

Wie erhalte ich die Cookies vom Browser gespeichert werden, so dass es in der aktuellen Sitzung verwendet werden kann?

+0

Kennen Sie "localStorage" und "sessionStorage"? –

+0

Hallo, ich möchte Session-Token hier speichern. Basierend auf dem, was ich online sehe, sind Cookies der sicherste Weg, dies zu tun. In einem Artikel, den ich verweise, heißt es: "Speichere niemals Zugriffstokens im lokalen Speicher, dieser Speicherbereich ist sehr anfällig für XSS-Angriffe" https://stormpath.com/blog/token-auth-spa. Bitte lassen Sie es mich wissen, wenn Sie denken, dass es einen anderen Weg gibt, der auch sicher ist. Vielen Dank! – Krejko

Antwort

0

Die Domäne für den Cookie wurde auf die Loopback-Adresse (127.0.0.1) festgelegt. In eckig habe ich den set-cookie-Endpunkt mit 'localhost' anstelle der Loopback-Adresse aufgerufen, die verhinderte, dass die Cookies im Browser gespeichert wurden. Sobald die Cookie-Domäne, die Endpunkt-Basis-URL und die Browser-Adresse mit der Loopback-Adresse übereinstimmten, funktionierte alles wie erwartet.

Interessante Randnotiz: Ich bin mir nicht sicher, warum im Moment, aber passende Adressen scheint nicht genug zu sein. Ich habe auch versucht, sowohl die Cookie-Domain, die Endpunkt-Basis-URL als auch die Browser-Adresse auf "localhost" zu setzen, aber dies hat den Cookie immer noch nicht gesetzt. Es funktionierte nur, wenn alle Werte die Loopback-Adresse waren.

Verwandte Themen