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

时间:2013-01-03 14:59:45

标签: 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)

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

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

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

  1. session_cookie [' key'] [' max-age'] ="时间以秒为单位"
  2. session_cookie [' key'] ['到期'] ="未来的日期"
  3. 我怎么知道令牌是否过期或者什么是管理过期令牌的最佳方式?

    非常感谢!

1 个答案:

答案 0 :(得分:3)

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

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

到期日期过去时,浏览器会删除Cookie以及与之相关的所有内容。

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

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

我希望我帮助过。

修改

来自rfc2109

  

最大年龄=Δ-秒         可选的。 Max-Age属性定义了生命周期         饼干,在几秒钟内。 delta-seconds值是十进制非         负整数。经过delta-seconds秒后,客户端         应该丢弃cookie。值为零表示cookie         应立即丢弃。

来自wiki http cookies

  

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

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

再读一点我发现IE<不支持max-age。 9意味着过期是首选

Max-Age vs Expires

那应该有所帮助; - )