Flask-Back按钮即使在注销后也会返回会话

时间:2013-12-18 08:11:34

标签: flask

我正在创建一个使用烧瓶的网站,需要登录和退出。我正在使用Flask-Security来帮助解决这个问题。我的问题是,在我退出后,如果我点击后退按钮,我将返回用户页面。有没有办法防止在通过按下Flask中的后退按钮退出后返回会话?

4 个答案:

答案 0 :(得分:4)

  

如果我点击后退按钮,我将返回用户页面

这实际上是一个不正确的陈述。

Web浏览器在用户导航时在本地缓存页面。如果用户注销然后点击后退按钮,将显示页面的缓存版本。用户不会返回用户会话,用户会话仍然关闭。

您必须欺骗浏览器以避免此行为,这可能很难。例如,如果您的页面仅包含基本布局,然后当您点击后退按钮时通过ajax请求所有内容,则ajax将发现服务器中没有用户会话,并且不会显示任何内容。

答案 1 :(得分:4)

通过在每次响应后添加Cache-Control标头,您可以告诉浏览器不要缓存任何页面。如果您只想对某些响应进行此操作,则可以将其添加到特定视图中。

# Ensure responses aren't cached
@app.after_request
def after_request(response):
    response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
    return response

答案 2 :(得分:1)

我不认为这是与Flask相关的问题。您可以做的是在注销后重定向用户。您可以使用redirect方法在Flask中执行此操作:

from flask import redirect
redirect(url)

然后,如果用户按下后退按钮,它将落在重定向所在的页面上,并将再次被重定向。

如果用户确实已登录,您还可以检查用户需要登录的每个页面,如果不是,则执行重定向。

浏览器可以缓存您的网页。当您点击后退按钮时,浏览器可以显示缓存页面。要阻止浏览器缓存页面,您可以设置Cache-Control: no-cache标头。在Flask中,您可以通过设置Response对象的header属性来执行此操作:

response.headers['Cache-Control'] = 'no-cache'

答案 3 :(得分:1)

使用Cache-Control标头阻止缓存页面。

response.headers.add('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0')