2015-05-29 42 views
1

我使用TornadoSecure Cookie功能来实现用户会话。 set_secure_cookie函数使我们能够创建一个Cookie,其中cookie的有效期限可以设置为1天。现在,我需要在一小时内将这些安全cookie过期。我能轻松实现吗?龙卷风创建一个安全Cookie,失效时间少于1天

一个解决方案是附加一个时间戳与cookie值。例如,如果Cookie值是我的用户ID(例如1),那么我可以创建一个像1_{current datetime}这样的cookie。稍后验证时,我可以拆分cookie值,并检查underscore character之后的日期时间是否不少于当前时间之前的1小时。这听起来可以接受,因为Tornado的安全Cookie不能被用户修改。

但是,有没有比这更优雅的解决方案?

回答

1

使用小数天。 12小时,0.5天,等

什么实际的代码确实是

datetime.datetime.utcnow() + datetime.timedelta(days=expires_days) 

而且timedelta转变一切秒,所以0.4的小数日期将近一个小时。

当您使用get_secure_cookie阅读cookie时,您还应该注意。阅读时,您应该将相同的值传递给max_age_days

+0

请注意,无论何时修改过期时间,通常在调用'get_secure_cookie'时都应更改'max_age_days'(两者具有稍微不同的含义; get端的'max_age_days'更重要,因为用户可以保存旧的cookie并在过期时间内重复使用)。分数值也适用于此。 –

+0

@BenDarnell如果我设置的cookie有效性为1小时,并且仍然不带参数调用get_secure_cookie(意味着最大31岁时),它可以检测到cookie无效(过去1小时)。我对么? – giga

+0

@BenDarnell我创建了一个小时有效的cookie。但cookie在一小时后似乎仍然有效!我是否还需要为“max_age_days”参数传递“一小时”值? – giga