clave secreta no configurada en la sesión de matraz, usando la extensión de sesión de matraz

Ahora mismo estoy usando un Flask 3rd party library Flask-Session y no estoy teniendo suerte de que una sesión funcione.

Cuando me conecto a mi sitio, obtengo el siguiente error:

RuntimeError: la sesión no está disponible porque no se estableció una clave secreta. Establezca secret_key en la aplicación a 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 puedes ver, configuro la clave secreta de la aplicación. ¿Qué estoy haciendo mal?

¿Hay otras opciones de sesión?

Otra información: Ejecución de 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 excepción es NullSessionInterface por la implementación de la sesión NullSessionInterface , que es el tipo de sesión predeterminado cuando utiliza Flask-Session. Esto se debe a que en realidad nunca le das la configuración de SESSION_TYPE a Flask ; no es suficiente configurarlo como un elemento global en su módulo. El código de ejemplo de inicio rápido de 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 más reciente; NullSession posible que NullSession haya tenido sentido con Flask 0.8 o 0.9, pero en la versión actual la clase flask.session.NullSession se usa como una 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 oa través de 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 tener ese trabajo 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á usando Flask-Session, entonces algo salió mal al configurar el secreto. Si está configurando app.config['SECRET_KEY'] o app.secret_key en un if __name__ == "__main__": guarda como se if __name__ == "__main__": arriba y recibe este error, entonces probablemente esté ejecutando su aplicación Flask a través de un servidor WSGI que importa su El proyecto del matraz 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 if __name__ == '__main__': tu aplicación ejecutando flask run el bloque if __name__ == '__main__': se omite. Si no quieres omitirlo, ejecuta 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.