2013-09-06 16 views
6

Podczas edytowania rekordu, jeśli jest długa przerwa, powiedzmy kilka minut (otrzymanie kawy), a następnie wrócisz, aby nacisnąć przycisk Zapisz (POST), nastąpi przekierowanie do głównej stronę, aby się zalogować, a dane zostaną utracone.Flask: limit czasu sesji logowania zbyt wcześnie

Wygląda na to, że sesja logowania do butelek wygasa zbyt szybko.

Zrobiłem trochę badań i natknąłem się na to.

from flask import session, app 

session.permanent = True 

Czy to właściwy sposób na przejście? Ale nawet gdy próbuję tego, otrzymuję ten wyjątek:

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

jakiej wersji kolby używasz? – codegeek

+0

Wersja 0.10. Właśnie zaktualizowałem do wersji 0.10.1. – Houman

+0

ok. Zapytałem, ponieważ w najnowszej wersji 0.10 wprowadzono pewne zmiany w sesjach, w tym dodanie flagi konfiguracji SESSION_REFRESH_EACH_REQUEST, która może lub może być problemem. Zmieniono także kontekst żądania, który obsługuje sesje. Czy możesz sprawdzić wartość flagi konfiguracji SESSION_REFRESH_EACH_REQUEST? Wygląda na to, że po naciśnięciu przycisku Wstecz może to być nowe żądanie, które następnie odświeża sesję? – codegeek

Odpowiedz

2

Jeśli spróbujesz uzyskać dostęp do obiektu sesji w ten sposób, to nie zadziała.

Zgodnie z komunikatem o błędzie, flask.session może być używany tylko z poziomu request context, który w tym momencie nie będzie istnieć. Powinieneś używać go tylko na trasie.

+0

To jest poprawna odpowiedź. Przenieś kod, który dotyka sesji w widoku, nie umieszczaj go w innym miejscu, ponieważ nie ma koncepcji sesji poza "żądaniem". – rdegges

6

Na wypadek, gdyby ktoś inny miał takie pytanie. Przypuszczam, że Hooman już dostał odpowiedź.

won `t praca

views.py

from flask import session 
from datetime import timedelta 

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

będzie działać

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 musi być używany wewnątrz wniosku.

Powiązane problemy