Flask-Login:如何强制Firefox / Chrome在标签关闭时删除会话cookie?

时间:2013-09-28 16:50:04

标签: python session cookies flask flask-login

我一直在尝试学习Flask,以及Flask-Login扩展程序。我可以按预期进行基本身份验证。让我难以理解的问题涉及Firefox中的“显示我上次的窗口和标签”设置以及Chrome中的“继续我离开的位置”设置。我在本网站和其他地方所做的所有研究表明,这些设置仅适用于打开的标签。因此,如果您通过身份验证然后关闭选项卡,然后关闭浏览器,则浏览器应仅恢复浏览器关闭时打开的选项卡的仅会话cookie。但是,对于Firefox和Chrome,当再次启动浏览器时,仅会话cookie仍处于活动状态,并导航到标记为@login_required的页面。我还要提一下,我将False传递给login_user remember参数,如: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是否合理?

2 个答案:

答案 0 :(得分:3)

  

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

显然是的,这是预期的行为,并且你没有理由期待这样的事情。您看到的行为似乎是浏览器实现“会话恢复”功能的一种深思熟虑的设计决策。

  • 请参阅此Firefox bug from 2009 (eternalsession)会话还原可能会导致会话Cookie生命周期过长,其中包含许多重复项且无解决方案。
  • 或当Chrome处理关闭时,Chromium bug from 2012 会话Cookie未被清除状态为WontFix

所以,简而言之,我不认为从服务器端你可以做些什么,无论多么棒的烧瓶:(

答案 1 :(得分:1)

什么日子说现场和your expectations should be correct。不过,可能会有一种解决方法。

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

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