7

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

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)

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

# Get cookies
cookies = request.get_cookies()
#     Get current token from cookies
token   = cookies['token'].value

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

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

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

非常感谢!

4

1 回答 1

3

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

token   = cookies['token'].value #this will not exist

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

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

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

我希望我有所帮助。

编辑

来自rfc2109

Max-Age=delta-seconds 可选。Max-Age 属性定义 cookie 的生命周期,以秒为单位。delta-seconds 值是十进制非负整数。在 delta-seconds 秒过去后,客户端应该丢弃 cookie。值为零表示应立即丢弃 cookie。

以及来自wiki http cookie

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

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

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

最大年龄与过期

那应该有帮助;-)

于 2013-01-03T15:54:03.530 回答