2013-03-21 6 views
8

Ich benutze die neuesten Flask/Werkzeug (Flask 0.9) Client-Side-Sitzungen, um Informationen zwischen Anfragen zu persistieren. Die Sitzung ist nicht dauerhaft (da es mir gut geht, wenn der Cookie gelöscht wird, wenn der Browser geschlossen wird).Flask-Sitzung vergisst den Zugang zwischen den Anfragen

Mein Problem ist wie folgt:

ich einige serverseitigen Code verwenden, um die Flasche Session-Variable mit einem Eintrag zu füllen. Danach sucht der Session-Variablen etwas wie folgt aus:

<SecureCookieSession {u'items': SOMENOTVERYIMPORTANTDICTIONARY}, '_fresh': True, 'user_id': u'1', 'csrf': '0aef1995cdf2cxx0233fdf3321d17fc7267f3b32', '_id': 'someUNIQUEcode'}*> 

ich diese Informationen benutzen, um eine Seite zu machen, die eine GET-Anforderung (durch JQuery) mit dem gleichen Kolben Anwendung führt, aber plötzlich das Wörterbuch mit den ‚Artikel‘ Eintritt in die Sitzung gegangen:

<SecureCookieSession {'_fresh': True, 'user_id': u'1', 'csrf': '0aef1995cdf2cxx0233fdf3321d17fc7267f3b32', '_id': 'someUNIQUEcode'}> 

ich habe einige der Suche um, und dachte, dass es der Tatsache zusammenhängen, dass ich auf localhost bin Tests (127.0.0.1 ist nicht das gleiche wie localhost). Ich habe meine Hosts-Datei korrigiert und einen 'dev.localhost'-Eintrag hinzugefügt, um sicherzustellen, dass alle Anfragen vom selben Host stammen.

Auch der Entwicklerbereich meines Browsers (Chrome) zeigt genau die gleichen Kennungen für die Session-Cookies, die an den Server gesendet werden.

Auch die Einstellung session.modified = True hilft nicht.

Das einzige, was zwischen den Anforderungen ändert, ist

__utmb=122666782.18.10.1363877633 

für die erste Anfrage (derjenige, der die items Eintrag auffüllt) gegen die zweite Anforderung

__utmb=122666782.19.10.1363877633 

Zu denken, dass es möglicherweise noch ein Ajax-bezogenes Ding. Ich habe den Inhalt der Sitzungsvariablen nach einem einfachen Seiten-Reload getestet: Der items-Eintrag ist immer noch aus der Sitzung entfernt.

Jede Hilfe würde sehr geschätzt werden.

+0

Kann dies helfen http://stackoverflow.com/questions/13760008/why-do-some-flask-session-values-disappear-from-session-after-closing-the-br – codegeek

+0

Ist nur Der Eintrag "items" wurde entfernt oder ist es etwas, das Sie in der Sitzung festgelegt haben? –

+0

@codegeek Ich habe mir diesen Eintrag angesehen, bevor ich meine Frage gepostet habe und angenommen, dass es sich um ein Cross-Host-Cookie-Problem handelt. Ich habe meinen Hostnamen auf 'localhost.dev' gesetzt, um Verwechslungen zwischen' localhost' und '127.0.0.1' zu vermeiden. Außerdem habe ich versucht, die Cookie & Server Domäne explizit in der Flask Konfiguration zu setzen, aber das hat auch nicht geholfen. – RJH

Antwort

10

Es stellt sich heraus, dass der Cookie, der an den Client (Chrome) zurückgesendet wird, das 4096-Byte-Limit für die Cookie-Größe überschreitet. Scheinbar verwendet Django standardmäßig serverseitige Sitzungen, wodurch dieses Problem nur dann auftrat, wenn ich meinen Code nach Flask verschoben habe. Die Verwendung serverseitiger Sitzungen in Flask wie in flask-kvsession und anderen sollte das Problem beheben.

+1

... wenn ich nur schon einmal über diese Frage gestolpert wäre (http://stackoverflow.com/questions/7100315/flask-session-member-not-persisting-across-requests?rq=1). – RJH

+1

... es ist unglaublich, dass wir zur Laufzeit keine Warnung erhalten. Es scheint, dass die Aussage einfach ignoriert wird. Ich bin mir sicher, dass das Signalisieren irgendwie die stundenlangen Bugsucheraktivitäten gerettet hätte. :) – filannim

Verwandte Themen