2013-09-06 4 views
6

При редактировании записи, если есть долгое ожидание, позвольте сказать несколько минут (выпить кофе), а затем вернуться, чтобы нажать кнопку сохранения (POST), я перенаправляюсь на главный страницу для входа в систему и данные будут потеряны.Кол-во: время сеанса входа слишком рано

Похоже, сеанс регистрации флэков истекает слишком быстро.

Я провел некоторое исследование и наткнулся на это.

from flask import session, app 

session.permanent = True 

Действительно ли это правильный путь? Но даже когда я пытаюсь это сделать, я получаю это исключение:

File "/Users/kave/workspace/F11A/src/application/__init__.py", line 14, in <module> 
    session.permanent = True 
    File "/Users/kave/workspace/F11A/src/lib/werkzeug/local.py", line 355, in <lambda> 
    __setattr__ = lambda x, n, v: setattr(x._get_current_object(), n, v) 
    File "/Users/kave/workspace/F11A/src/lib/werkzeug/local.py", line 297, in _get_current_object 
    return self.__local() 
    File "/Users/kave/workspace/F11A/src/lib/flask/globals.py", line 20, in _lookup_req_object 
    raise RuntimeError('working outside of request context') 
RuntimeError: working outside of request context 
+0

Какую версию фляги вы используете? – codegeek

+0

Версия 0.10. Я просто обновился до 0.10.1. – Houman

+0

ОК. Я спросил, потому что в последней версии 0.10 произошли некоторые изменения, внесенные в сеансы, включая добавление флага конфигурации SESSION_REFRESH_EACH_REQUEST, который может быть или может быть проблемой. Кроме того, был изменен контекст запроса, который обрабатывает сеансы. Вы можете проверить значение значка конфигурации SESSION_REFRESH_EACH_REQUEST? Похоже, что когда вы нажимаете кнопку «Назад», это может быть новый запрос, который затем обновляет сеанс? – codegeek

ответ

2

Если вы попытаетесь получить доступ к объекту сеанса, как это, это не сработает.

Как указано в сообщении об ошибке, flask.session может использоваться только в пределах request context, который не будет существовать в этой точке. Вы должны использовать его только в пределах маршрута.

+0

Это правильный ответ. Переместите код, который касается вашего сеанса внутри представления, не помещайте его в другое место, так как нет понятия сеанса вне «запроса». – rdegges

6

На всякий случай у кого-то будет этот вопрос. Полагаю, Хооман уже получил ответ.

won`t работы

views.py

from flask import session 
from datetime import timedelta 

session.permanent = True 
app.permanent_session_lifetime = timedelta(minutes=30) 

будет работать

from flask import session 
from datetime import timedelta 

@app.route('/home', methods=['GET', 'POST']) 
def show_work(): 
    session.permanent = True 
    app.permanent_session_lifetime = timedelta(minutes=30) 
    form = MyForm(request.form) 
    return render_template('home.html', form = form) 

session должен использоваться внутри запроса.

Смежные вопросы