variable sessions sesiones example custom python session flask

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.