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

Flask-后退按钮即使在注销后也会返回会话,flask,Flask,我正在使用flask创建一个需要登录和注销的网站。我正在使用Flask Security来帮助解决这个问题。我的问题是,在我注销后,如果我点击后退按钮,我会返回到用户页面。有没有办法通过按Flask中的后退按钮来防止注销后返回会话?我不认为这是一个与Flask相关的问题。您可以做的是在注销后重定向用户。您可以使用重定向方法在烧瓶中执行此操作: from flask import redirect redirect(url) 然后,如果用户按下后退按钮,它将降落在重定向所在的页面上,并再次被重定

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

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

from flask import redirect
redirect(url)
然后,如果用户按下后退按钮,它将降落在重定向所在的页面上,并再次被重定向

如果用户确实登录了,您还可以在每个页面上检查用户需要登录的位置,如果用户没有登录,则执行重定向

浏览器可以缓存你的页面。当您点击后退按钮时,浏览器会显示缓存的页面。要防止浏览器缓存页面,可以设置
缓存控件:no Cache
标题。在Flask中,您可以通过设置响应对象的
标题
属性来完成此操作:

response.headers['Cache-Control'] = 'no-cache'
如果我点击后退按钮,我将返回到用户页面

这其实是不正确的说法

当用户导航时,web浏览器会在本地缓存页面。如果用户注销,然后单击“上一步”按钮,将显示页面的缓存版本。用户将不会返回到用户会话,用户会话仍处于关闭状态


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

使用
缓存控件
头阻止页面被缓存

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

通过在每次响应后添加
缓存控件
标题,可以告诉浏览器不要缓存任何页面。如果您只想在某些响应中使用此选项,可以将其添加到特定视图中

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

对我来说,重定向只有在我点击刷新按钮时才起作用。实施重定向后,我仍然可以使用“后退”按钮返回用户页面,但如果在用户页面上单击“刷新”按钮,我将被发送回登录页面。我希望“上一步”按钮不会将我带回用户页面。我键入了
response.headers['Cache-Control']='no Cache'
,但它对我不起作用。我在谷歌上搜索了一下,找到了
response.headers.add('Cache-Control','no-store,no-Cache,must-revalidate,post-check=0,pre-check=0')
,这很有效。感谢您引导我走上正确的道路。我添加了,
returnredirect(url\u for(login\u url))
会重定向到登录页面,但按下后会转到我登录的页面。@你是否设置了
无缓存
标题?@rednaw让我们假设用户在
/dashboard
中,如果他单击注销,我会带他到
/logout
清除缓存和cookies,然后将他重定向到
/login
页面。现在,如果他按下后退按钮,它将转到
/dashboard
,并显示数据。虽然如果我将nocache设置为Dashboard,那么它可以正常工作,但问题是你永远不知道用户从哪个页面注销,所以你需要为所有我不想做的loggedin页面设置nocache。