Internal Server Error bei der Verwendung von Kolben-Sitzung
Will ich speichern eine ID zwischen Anforderungen, mit Kolben session
cookie, aber ich bin immer ein Internal Server Error
als Ergebnis,, wenn ich eine Anfrage.
Ich einen Prototypen einer einfachen Kolben-app für den Nachweis der mein problem:
#!/usr/bin/env python
from flask import Flask, session
app = Flask(__name__)
@app.route('/')
def run():
session['tmp'] = 43
return '43'
if __name__ == '__main__':
app.run()
Warum ich nicht speichern kann die session
cookie mit dem folgenden Wert, wenn ich die Anfrage?
- Welche Fehler haben Sie?
- Ich bin immer "no secret key wurde gesetzt" angezeigt. Aber ich dachte (offenbar falsch), der wurde automatisch gesetzt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut Kolben-Sitzungen-Dokumentation:
Set geheimen Schlüssel. Und Sie soll eine Zeichenkette zurückgeben, nicht int.
os.urandom
zu generieren, die zufällige bytes und gefiltert druckbaren ein. BTW, wenn du immer generieren ranodm Nummer jedes mal, wenn Sie auf dem server ausgeführt werden, wirst du Probleme haben. Zum Beispiel, wenn Sie mehrere Instanz-Kolben, alle Instanzen verfügen über den Unterschied geheimen Schlüssel.SESSION_COOKIE_SECURE
zuTrue
, und dient über HTTP (z.B. für die Prüfung), das Ergebnis ist ähnlich wie das Problem hier erlebt (d.h. der cookie wird nicht gesetzt). In anderen Worten, ein Sicheres cookie wird nicht gespeichert, wenn nicht HTTPS.SecureCookieSession
) aus mindestens zwei Tasten. oder anders, es gibt so etwas wie "[FEHLER: Keine JSON-Daten]". Aber die Tatsache (seltsam) ist, dass der SESSION-COOKIE ENTSCHLÜSSELT WERDEN KANN. Die Frage ist: wie geschieht dies?Als @falsetru erwähnt, müssen Sie einen geheimen Schlüssel.
Bevor die
session
cookie an den browser des Benutzers, Fläschchen Zeichen der cookies in verschlüsselter Form, und das bedeutet nicht, dass Sie nicht entschlüsselt das cookie. Ich nehme an, dass der Kolben verfolgt die signierte cookies, so dass es durchführen können es die eigenen "Magie", um zu bestimmen, ob das cookie gesendet wurde zusammen mit der Anfrage (request-Header), wird ein gültiges cookie oder nicht.Einige Methoden, die Sie verwenden können, die alle im Zusammenhang mit Flask Instanz der Klasse, in der Regel definiert als
app
:Definition der
secret_key
variable fürapp
Objektmithilfe der
config()
MethodeVerwendung einer externen Konfigurations-Datei für die gesamte Kolben-Anwendung
Hier ist ein Beispiel (eine Adaption von dieser Artikel), die sich auf die ein klareres Bild der Flachmann
session
cookie, in Anbetracht der Beteiligung von Client-und Server-Seiten:Hier ist die Ausgabe:
Haben Sie möglicherweise bemerkt, dass in dem Beispiel oben, ich bin mit der
os
lib und dieurandom()
Funktion, um zu generieren, Flask ' s secret-key, richtig?Vom die offizielle doc:
PLUS HINWEIS
Unter
app = Flask(__name__)
Platz dieser:app.secret_key = os.urandom(24)
.