geheime Schlüssel nicht in Kolben-Sitzung über die Kolben-Session Erweiterung
Recht, jetzt bin ich mit einem Fläschchen 3rd-party-Bibliothek Kolben-Sitzung und ich habe kein Glück immer eine Sitzung zu arbeiten.
Wenn ich eine Verbindung zu meiner Website, bekomme ich die folgende Fehlermeldung:
Absturz mit Laufzeitfehler: die Sitzung ist nicht verfügbar, da kein geheimer Schlüssel war
set. Setzen Sie den secret_key auf die Anwendung, um etwas einzigartiges und
secret.
Unten ist mein server code.
from flask import Flask, session
from flask.ext.session import Session
SESSION_TYPE = 'memcache'
app = Flask(__name__)
sess = Session()
nextId = 0
def verifySessionId():
global nextId
if not 'userId' in session:
session['userId'] = nextId
nextId += 1
sessionId = session['userId']
print ("set userid[" + str(session['userId']) + "]")
else:
print ("using already set userid[" + str(session['userId']) + "]")
sessionId = session.get('userId', None)
return sessionId
@app.route("/")
def hello():
userId = verifySessionId()
print("User id[" + str(userId) + "]")
return str(userId)
if __name__ == "__main__":
app.secret_key = 'super secret key'
sess.init_app(app)
app.debug = True
app.run()
Wie Sie sehen können, habe ich die app secret key. Was mache ich falsch?
Gibt es andere session-Optionen?
Weitere Infos:
Ausführen von Python 2.7 auf Linux Mint
Volle einfügen:
Traceback (most recent call last):
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/sean/code/misc/session/sessiontest.py", line 27, in hello
userId = verifySessionId()
File "/home/sean/code/misc/session/sessiontest.py", line 16, in verifySessionId
session['userId'] = nextId
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/werkzeug/local.py", line 341, in __setitem__
self._get_current_object()[key] = value
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/sessions.py", line 126, in _fail
raise RuntimeError('the session is unavailable because no secret '
RuntimeError: the session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret.
- Was ist die vollständige traceback der exception?
- Und welche version von
Flask-Session
verwenden Sie? Ich finde keine Referenz der Ausnahme, dass in den aktuelle Projekt Quelle. - Irgendeine Idee, wie ich das herausfinden könnten? Ich habe gerade ein pip installieren für Sie
- Finden Sie die Ausnahme Nachricht schon; es ist im Kolben selbst, nicht auf Kolben-Sitzung.
- Ich fügte hinzu, die vollständige Rückverfolgung. Es erscheint, wenn ich Versuch, die 'userId' key, wie Sie sehen können
Du musst angemeldet sein, um einen Kommentar abzugeben.
In deinem Fall die Ausnahme wird ausgelöst durch die
NullSessionInterface
session-Implementierung, die die default-session geben wenn Sie Flasche-Sitzung. Das ist, weil Sie nicht immer tatsächlich geben dieSESSION_TYPE
Konfiguration zu Kolben; es ist nicht genug, um es als global im Modul. Die Kolben-Sitzung quickstart-Beispiel-code tut, legen Sie eine Globale, aber dann wird die aktuelle Modul-Konfiguration-Objekt durch Aufrufapp.config.from_object(__name__)
.Dieser Standard macht nicht viel Sinn mit Kolben 0,10 oder höher;
NullSession
ggf. sinnvoll mit Kolben 0.8 oder 0.9, aber in der aktuellen version derKolben.Sitzung.NullSession
Klasse wird als ein Fehler signal aus. In Ihrem Fall gibt es Sie, die falsche Fehlermeldung angezeigt.Legen Sie die
SESSION_TYPE
Konfiguration option auf etwas anderes. Wählen Sie eineredis
,memcached
,filesystem
odermongodb
, und stellen Sie sicher, dass es inapp.config
(direkt oder über die verschiedenenConfig.from_*
Methoden).Für einen schnellen test, Einstellung
filesystem
ist am einfachsten; es gibt genug Standard-Konfiguration zu haben, die ohne zusätzliche Abhängigkeiten:Wenn Sie diese Fehlermeldung sehen, und Sie sind nicht mit Kolben-Sitzung, dann ist etwas schief gegangen mit der Einstellung, das Geheimnis. Wenn Sie die Einstellung
app.config['SECRET_KEY']
oderapp.secret_key
imif __name__ == "__main__":
guard wie oben und erhalten Sie diese Fehlermeldung, dann sind Sie wahrscheinlich laufen deine Kolben app via WSGI-server, importiert die Kolben-Projekt als Modul, und die__name__ == "__main__"
block wird nie ausgeführt.Ist es immer besser,die Verwaltung der Konfiguration für Kolben-apps in einer separaten Datei, sowieso.
app.secret_key
ist eine schlechte Praxis. Besser, geheimen Schlüssel durch dieapp.config
Objekt, das können Sie zum auslagern der Konfiguration in eine externe Datei.app.secret_key = ...
aus der falls blockieren – was im Nachhinein Sinn macht, da Heroku läuft die app über gunicorn, was bedeutet, dass dieif __name__ == "__main__":
block ist nie eingetragen.Legen Sie den geheimen Schlüssel außerhalb der
if __name__ == '__main__':
app.py:
Beim starten der app ausgeführt
flask run
dieif __name__ == '__main__':
block wird übersprungen. Wenn Sie nicht wollen, um es zu überspringen, führen Sie mitpython app.py
.Versuchen Sie dies:
Und entfernen Sie Ihre
app.secret_key
Zuordnung an der Unterseite.