秘密密钥没有在烧瓶会议中设置

我有一个运气在Flask(一个Python模块)中运行的运气。

现在我正在使用烧瓶第三方库Flask-Session

当我连接到我的网站时,出现以下错误:

RuntimeError:会话不可用,因为没有设置密钥。 将应用程序上的secret_key设置为独特和秘密的内容。

以下是我的服务器代码。

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() 

正如你所看到的,我确实设置了应用密钥。 我究竟做错了什么?

是否有其他会议选项?

其他信息:在Linux Mint上运行Python 2.7

全贴:

 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. 

NullSessionInterface会话实现引发了exception,这是您使用Flask-Session时的默认会话types 。 那是因为你实际上没有给SESSION_TYPEconfiguration给Flask ; 在模块中将其设置为全局是不够的

对于Flask 0.10,这个默认值没什么意义。 它可能对Flask 0.8或0.9有意义,但当前版本被用作错误信号。 在你的情况下,它现在给你错误的错误信息。

SESSION_TYPEconfiguration选项设置为其他值。 selectredismemcachedfilesystemmongodb

将其设置为filesystem是最简单的; 那里有足够的默认configuration可以在没有额外依赖的情况下工作:

 if __name__ == "__main__": app.secret_key = 'super secret key' app.config['SESSION_TYPE'] = 'filesystem' sess.init_app(app) app.debug = True app.run() 

设置if __name__ == '__main__':之外的密钥if __name__ == '__main__':

 from flask import Flask, session app = Flask(__name__) app.secret_key = "super secret key" @app.route("/") ... if __name__ == '__main__': app.debug = True app.run() 

尝试这个:

 app = Flask(__name__) app.config['SESSION_TYPE'] = 'memcached' app.config['SECRET_KEY'] = 'super secret key' sess = Session() 

并删除底部的app.secret_key作业。