在ajax上下文中烧瓶中的会话

时间:2015-05-20 15:58:50

标签: python ajax session flask

我使用permanent_session_lifetime在一段时间不活动后使用户的会话失效。问题是,这个请求是通过ajax进行的,所以我无法在ajax上下文中重定向烧瓶的正常行为。

http://xxxx/login?next=%2Fusers%2Fajax_step1

如果烧瓶会话到期,我希望重定向到logout中的before_request路线,而不是这个。我怎么能这样做?

@mod.before_request
def make_session_permanent(): 
    session.modified = True
    session.permanent = True
    app.permanent_session_lifetime = timedelta(minutes=10)
@mod.route('/logout')
@login_required
def logout():
    logout_user()
    session.clear()
    flash(gettext(u'You have been logged out.'))
    return redirect(url_for('auth.login'))

1 个答案:

答案 0 :(得分:1)

如果您想使用before_request方法,请检查会话在那里的有效性,并根据需要返回重定向:

@mod.before_request
def make_session_permanent():
    if session_is_invalid(session):
        return redirect(url_for('logout'))

def session_is_invalid(ses):
    # return your qualifier

否则,swehren的评论是一个好主意 - 而不是依赖于后台重定向 next 调用,在前端重定向中根据返回的有效性调用Ajax。 Ajax电话:

$.ajax({
    type: "POST",
    url: "{{ url_for('login') }}",
    success: function(data) {
        // redirect if the data contained a qualifier for an expired session
    }
});