使用Python中的SimpleCookie管理令牌生存期

Pep*_*zza 7 python cookies wsgi

已经有令牌正常工作,这是这样设置的:

session_cookie = SimpleCookie()
session_cookie['key'] = any_string_value
session_cookie['key']["Path"] = '/'

headers = []
headers.extend(("set-cookie", morsel.OutputString())
    for morsel
    in session_cookie.values())

start_response(status, headers)
Run Code Online (Sandbox Code Playgroud)

我也能读取令牌并提取我需要的信息:

# Get cookies
cookies = request.get_cookies()
#     Get current token from cookies
token   = cookies['token'].value
Run Code Online (Sandbox Code Playgroud)

现在,设置cookie过期的最佳方法是什么,我知道有两个可能的键:

  1. session_cookie ['key'] ['max-age'] ="以秒为单位的时间"
  2. session_cookie ['key'] ['expiration'] ="将来的某个日期"

我怎么知道令牌是否过期或者什么是管理过期令牌的最佳方式?

非常感谢!

Jim*_*ane 3

当您尝试获取令牌时,如果该令牌不存在,您可以知道该令牌是否已过期。

\n
token   = cookies[\'token\'].value #this will not exist\n
Run Code Online (Sandbox Code Playgroud)\n

当过期日期过后,浏览器将删除 cookie 以及与之相关的所有内容。

\n

这样,在许多实现中,您甚至可以删除 cookie,或者例如注销用户,但将 user_id cookie 的到期日期设置为过去的某个日期(例如负数)。

\n

现在,据我了解,您需要一个策略来检测服务器端过期的令牌,这可以通过双重验证来完成。例如,尝试为每个令牌存储唯一标识符,并且当您读取令牌时,服务器端尝试检查它是否已过期。用户也可以操纵他的 cookie,因此永远不要盲目信任 cookie 来存储重要数据或进行任何 user_id 简单验证。

\n

我希望我有所帮助。

\n

编辑

\n

来自rfc2109

\n
\n

Max-Age=delta-秒\n可选。Max-Age 属性定义 cookie 的生命周期(以秒为单位)。增量秒值是十进制非负整数。\n 经过 delta-seconds 秒后,客户端\n应丢弃 cookie。值为零意味着应立即丢弃 cookie。

\n
\n

以及来自wiki http cookies

\n
\n

Expires 指令告诉浏览器何时删除 cookie。\n源自 RFC 1123 中使用的格式,日期以 \n\n\xe2\x80\x9cWdy, DD Mon YYYY HH:MM:SS GMT\xe2\ 的形式指定x80\x9d,[29] 指示此 cookie 过期的确切\n日期/时间。作为将 cookie 过期设置为绝对日期/时间的替代方案,RFC 6265 允许使用 Max-Age 属性将 cookie\xe2\x80\x99s 过期设置为未来秒数间隔(相对于浏览器收到\ncookie 的时间。

\n
\n

我建议使用 max-age,因为可以节省设置日期等方面的一些麻烦。您只需计算一个间隔。

\n

多读一点,我发现 IE < 9 不支持 max-age,这意味着首选过期

\n

最大年龄与过期时间

\n

这应该有帮助;-)

\n