5

我一直在尝试学习 Flask,以及 Flask-Login 扩展。我可以按预期进行基本身份验证。让我难过的问题涉及 Firefox 中的“显示我上次的窗口和选项卡”设置和 Chrome 中的“继续我离开的地方”设置。我在这个网站和其他地方所做的所有研究表明,这些设置应该只适用于打开的标签。因此,如果您通过身份验证然后关闭选项卡,然后关闭浏览器,则浏览器应该只恢复浏览器关闭时打开的选项卡的仅会话 cookie。但是,对于 Firefox 和 Chrome,当再次启动浏览器并且我导航到标记为 @login_required 的页面时,仅会话 cookie 仍然处于活动状态。login_user(user, remember=False)

我已经尝试过使用 Flask-Login 扩展进行新登录的想法,认为在关闭浏览器之前关闭选项卡肯定会将会话标记为过时,但事实并非如此。如果登录是新的,我检查login_fresh()返回 true 的值,它仍然返回 True。

我发现了如何使登录在给定时间后使用session.permanent = True然后设置过期app.permanent_session_lifetime = 'so many minutes/seconds',这很好用,但不是我想要的。

我可以接受这样一个事实,即 Firefox / Chrome 会记住打开的选项卡的会话 cookie,但我不明白为什么即使在关闭浏览器之前关闭选项卡,它们也会记住我的站点的会话 cookie。这是预期的行为吗?当我先关闭选项卡然后关闭浏览器时,期望为我的网站删除会话 cookie 是否合理?

4

2 回答 2

3

这是预期的行为吗?当我先关闭选项卡然后关闭浏览器时,期望为我的网站删除会话 cookie 是否合理?

显然是的,这是预期的行为,不,你没有理由期待这样的事情。您所看到的行为似乎是浏览器实现“会话恢复”功能的方式中经过深思熟虑的设计决定。

所以,简而言之,我不认为你可以从服务器端做任何事情,不管烧瓶有多棒:(

于 2013-09-30T19:08:01.170 回答
1

Day 所说的是正确的,您的期望应该是正确的。不过,可能有一种变通方法。

您可以使用生命周期较短的永久会话 (PERMANENT_SESSION_LIFETIME),并在每次请求时刷新其生命周期 (SESSION_REFRESH_EACH_REQUEST)。

我认为这是一个相当新的配置(0.10 IIRC)。

于 2014-02-22T04:26:27.900 回答