使用 python 烧瓶设置持久 cookie

Posted

技术标签:

【中文标题】使用 python 烧瓶设置持久 cookie【英文标题】:set persistent cookie with python flask 【发布时间】:2016-07-11 09:56:57 【问题描述】:

我正在尝试使用 cookie 来记住访问者是否已经在我的网站上看到过特定的教程页面。该网站是使用 Flask 构建的。

教程页面是从烧瓶路由加载的,所以我认为尝试使用烧瓶框架中的 make_response 和 response.set_cookie 函数更改烧瓶路由定义中的 cookie 是有意义的。

但是,此(会话)cookie 仅用于会话期间。 我找不到有关使用烧瓶设置永久/持久 cookie 的任何信息。我怎么能用烧瓶做到这一点?

谢谢!

【问题讨论】:

看看flask-login。它提供remember be 功能。您还可以在 Miguel Gringerg 的 flask tutorial 中找到使用它的示例 感谢您为我指明了正确的方向。然而,Flask-login 确实感觉有点像只为 cookie 添加属性有点矫枉过正。没有其他方法可以更改持久性 cookie? this thread 可以提供帮助吗?另外,请确保您正确使用session.permanent(请参阅this thread) 再次感谢您的指点。非常感激。看了一下,试过了,最后还是用javascript做了他的cookie.... 【参考方案1】:

要设置持久性cookie,必须在http头中添加“expires”字段:

Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>

如果您不提供Expires=,则浏览器会将cookie视为“会话”cookie,并在浏览器关闭时删除该cookie。

对于 Flask,您可以将 response.set_cookie() 函数的参数 expires= 用于 30 天 cookie:

import datetime
response.set_cookie(name, value,
                    expires=datetime.datetime.now() + datetime.timedelta(days=30)) 

【讨论】:

以上是关于使用 python 烧瓶设置持久 cookie的主要内容,如果未能解决你的问题,请参考以下文章

在Web请求之间设置cookie不会持久存在

烧瓶永久会话:在哪里定义它们?

Firefox不允许我使用FormsAuthentication设置持久性cookie

如何通过express-session在node.js上设置持久性cookie?

下一个使用 cookie 的 js redux-observable 持久认证令牌

cookies不设置过期时间默认是永远不过期吗