секретный ключ не установлен в колбе сессии



мне повезло 0 получить сеанс работы в колбе (модуль Python).



сейчас я использую колбу 3-й партии библиотека Фляга-Сессии



при подключении к моему сайту, я получаю следующее сообщение об ошибке:




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


Как вы можете видеть, я поставил секретный ключ приложения. Что я делаю не так?



есть ли другие варианты встречи?



другая информация:
Запуск Python 2.7 на Linux Mint



полный вставить:



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.
774   3  

3 ответов:

исключение вызывается NullSessionInterface реализация сеанса, которая является тип сеанса по умолчанию при использовании колбы-сессии. Это потому, что вы никогда на самом деле не даете SESSION_TYPE конфигурация в колбы; это не хватает установить его в качестве глобального в вашем модуле.

это значение по умолчанию не имеет большого смысла с колбой 0.10; это может иметь смысл с колбой 0.8 или 0.9, но текущая версия используется в качестве сигнала ошибки. В ваш случай это дает вам неправильное сообщение об ошибке сейчас.

установить SESSION_TYPE вариант конфигурации к чему-то еще. Выберите один из redis,memcached,filesystem или mongodb.

установка filesystem легче; достаточно конфигурации по умолчанию, чтобы иметь эту работу без дополнительных зависимостей:

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__':

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

при запуске приложения, запустив flask run the if __name__ == '__main__': блок пропускается. Если вы не хотите пропустить его, запустите с python app.py.

попробуйте это:

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

и удалить app.secret_key задание внизу.

Comments

    Ничего не найдено.