python - sessions - flask set session variable
clave secreta no establecida en sesión de matraz, utilizando la extensión Flask-Session (3)
En este momento estoy usando un matraz de la biblioteca de terceros Flask-Session y no tengo suerte de que una sesión funcione.
Cuando me conecto a mi sitio, aparece el siguiente error:
RuntimeError: la sesión no está disponible porque no se configuró ninguna clave secreta. Establezca secret_key en la aplicación en algo único y secreto.
A continuación se muestra mi código de servidor.
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()
Como puede ver, configuro la clave secreta de la aplicación. ¿Qué estoy haciendo mal?
¿Hay otras opciones de sesión?
Otra información: Running Python 2.7 en Linux Mint
Pasta completa:
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.
En su caso, la implementación de la sesión
NullSessionInterface
la
NullSessionInterface
, que es el
tipo de sesión predeterminado
cuando utiliza Flask-Session.
Eso es porque en realidad nunca le das la configuración
SESSION_TYPE
a Flask
;
no es
suficiente
establecerlo como global en su módulo.
El
código de ejemplo de inicio rápido Flask-Session
establece un global, pero luego usa el módulo actual como un objeto de configuración llamando a
app.config.from_object(__name__)
.
Este valor predeterminado no tiene mucho sentido con Flask 0.10 o posterior;
NullSession
puede haber tenido sentido con Flask 0.8 o 0.9, pero en la versión actual, la
clase
flask.session.NullSession
se usa como señal de error.
En su caso, le da el mensaje de error incorrecto ahora.
Establezca la opción de configuración
SESSION_TYPE
en otra cosa.
Elija uno de
redis
,
memcached
,
filesystem
o
mongodb
, y asegúrese de configurarlo en
app.config
(directamente o mediante los
diversos métodos
Config.from_*
).
Para una prueba rápida, configurarlo en el
filesystem
de
filesystem
es más fácil;
hay suficiente configuración predeterminada para que funcione sin dependencias adicionales:
if __name__ == "__main__":
app.secret_key = ''super secret key''
app.config[''SESSION_TYPE''] = ''filesystem''
sess.init_app(app)
app.debug = True
app.run()
Si ve este error y no está utilizando Flask-Session, algo ha salido mal al configurar el secreto.
Si está configurando
app.config[''SECRET_KEY'']
o
app.secret_key
en un
if __name__ == "__main__":
como anteriormente y obtendrá este error, entonces probablemente esté ejecutando su aplicación Flask a través de un servidor WSGI que importa su El proyecto de frasco
como módulo
, y el bloque
__name__ == "__main__"
nunca se ejecuta.
De todos modos, siempre es mejor administrar la configuración de las aplicaciones de Flask en un archivo separado .
Establezca la clave secreta fuera de
if __name__ == ''__main__'':
app.py:
from flask import Flask, session
app = Flask(__name__)
app.secret_key = "super secret key"
@app.route("/")
...
if __name__ == ''__main__'':
app.debug = True
app.run()
Cuando inicie su aplicación ejecutando el
flask run
el bloque
if __name__ == ''__main__'':
se omite.
Si no desea omitirlo, ejecute con
python app.py
Prueba esto:
app = Flask(__name__)
app.config[''SESSION_TYPE''] = ''memcached''
app.config[''SECRET_KEY''] = ''super secret key''
sess = Session()
Y elimine su asignación
app.secret_key
en la parte inferior.