Ich habe eine Flask
Anwendung, serviert mit Nginx + WSGI (FastCGI & Gevent) und Standard-Flask-Sitzungen verwenden. Ich mache nicht Verwenden Sie die session.permanent=True
oder eine andere zusätzliche Option, aber einfach SECRET_KEY
in der Standardkonfiguration festlegen.Konstante Flask Session IDs
Ich mache nicht Speichern Sie alle (Schlüssel, Wert) Paare in der Sitzung, und verlassen Sie sich nur auf den SID = session['_id']
Eintrag, um einen wiederkehrenden Benutzer zu identifizieren. Ich verwende den folgenden Code das Lesen der SID
:
@page.route ('/')
def main (page='home', template='index.html'):
if not request.args.get ('silent', False):
print >> sys.stderr, "Session ID: %r" % session['_id']
ich folgende Beobachtungen gemacht:
- Für die gleichen IP-Adressen, aber verschiedenen Browsern ich verschiedene
SIDs
- das erwartet wird; - Für verschiedene IPs & gleichen Browser habe ich wieder anders
SIDs
- erwartet; - Für die gleiche IP-Adresse mit dem gleichen Browser bekomme ich das gleiche
SID
- auch erwartet; Jetzt
, Punkt (3) ist interessant, denn selbst wenn ein löschen das entsprechende Cookie die SID
konstant bleibt! In gewissem Maße sogar das könnte verständlich sein, aber eigentlich habe ich erwartet, dass die SID
zwischen verschiedenen Cookies wechseln. Aber der einzige Unterschied, den ich sehe, ist, dass
session.new is True
für die ersten Anfrage unmittelbar nach dem Löschen des Cookies. Sogar das wird sehr erwartet; aber diese Tatsachen gegeben ich die folgenden Problemen konfrontiert:
Bedeutet dies, dass für verschiedene Benutzer hinter dem gleichen IP Sitzung (mit dem gleichen Browser-Konfiguration) mein Back-End ihnen für die verwechseln wird gleiche Benutzer?
Wenn Punkt (1) nicht der Fall ist, das aktuelle Verhalten dieser „sticky“ Sitzungen ist eigentlich recht angenehm, da dies die Situation vermeidet, wo meine Benutzer nur dort Daten verloren gehen könnten, weil sie das entsprechende Cookie gelöscht .
Sie können den Tag noch speichern, indem Sie die Website aus demselben Netzwerk mit demselben Browser erneut aufrufen. Ich mag das, aber nur wenn Punkt (1) ist nicht der Fall.
Ich nehme an, Punkt (1) wird mich tatsächlich beißen, wäre die Schlussfolgerung eigentlich eine
token
in der Sitzung zu speichern und damit das Schicksal, dass der Benutzer sich in die Luft sprengen kann, einfach durch Löschen seines Cookies akzeptieren?Oder gibt es eine Möglichkeit,
Flask
zu geben, um verschiedeneSIDs
für jeden frischen Cookie zu geben?
Eigentlich ist diese Frage zu wecken, da ich eine Last Auswirkungen Dienst verwendet, die verschiedenen Benutzer wurde simuliert (auf der gleichen IP), aber mein Back-End hielt sie als einzelner Nutzer zu sehen, da die entsprechenden SIDs
waren alles das selbe.
Die Anwendung ist für Tests bei http://webed.blackhan.ch zur Verfügung (die nach der Freigabe wird die https://notex.ch [ein Browser-basiertes Texteditor] bewegen). Danke für deine Antworten.
Vielen Dank für die Antwort: In der Tat verwende ich 'Flask-Login' und ich denke, das erklärt, warum ich nur einen einzigen Benutzer mit der gleichen (IP, User-Agent) Kombination sah. Ich habe ein Token in den Cookie eingeführt, um in diesem Fall unterscheiden zu können. – hsk81
@ hsk81: Das ist seltsam. Ich bin mir ziemlich sicher, dass Flasks Sitzungen zufällige IDs zugewiesen werden, um Probleme wie diese zu vermeiden. – Blender
Keine Ahnung, es gibt mir einen konstanten Wert für 'session ['_ id']' selbst nach dem Löschen des Cookies. Mein Eindruck ist, dass es keine solche Randomisierung gibt, oder irgendwie ist 'session ['_ id'] 'der falsche Weg, um auf die Identität einer Sitzung zuzugreifen. Ich habe keinen Hinweis darauf gefunden, was der * kanonische * Ansatz hier sein soll, und habe einfach in den Cookie hineingeschaut, welchen Eintrag Flask erstellt und benutzt: ''_id''. Ich habe vielleicht etwas in der Dokumentation übersehen. – hsk81