tornado设置cookie过期时间(expires time)
具体的tornado设置过期时间的东西, 我也是查资料才发现的, 现在就贴代码吧
用户登录之后, 设置cookie, 我使用set_secure_cookie的, 它默认是有个30天的过期时间, 导致你关闭浏览器, 下次打开网站, 你还是登录状态.
然后过期时间想修改为, 关闭就失效, 答案很简单, 设置 expires_days=None, 就行了, 代码如下:
- def set_current_user(self, user):
- # http://stackoverflow.com/questions/12383697/tornado-secure-cookie-expiration-aka-secure-session-cookie
- # Pass expires_days=None to make it a session cookie (which expires when the browser is closed).
- self.set_secure_cookie('user_id', '1', expires_days=None)
这里要注意的是不要同时传递expires参数给set_secure_cookie函数:
- self.set_secure_cookie('user_id', '1', expires_days=None, expires=某个时间)
不要这么搞, 直接不传递任何时间给expires, 否则, 就不会实现浏览器关闭就失效了.
问题来了, 那么设置cookie15分钟之后过期怎么办?
最开始, 我的尝试是 设置expires=15*60, 即设置expires=900,
- def set_current_user(self, user):
- # http://stackoverflow.com/questions/12383697/tornado-secure-cookie-expiration-aka-secure-session-cookie
- # Pass expires_days=None to make it a session cookie (which expires when the browser is closed).
- self.set_secure_cookie('user_id', '1', expires_days=None, expires=900)
好了, 问题来了, 登录之后, 马上转到用户主页, 然后接着马上就处于注销状态, 又转到登录页面了. 查看了http请求头信息, 发现过期的时间是1970年1月1日, 看来这个expires要设置为当前时间+额外的900秒.
新的尝试:
- def set_current_user(self, user):
- import time
- # http://stackoverflow.com/questions/12383697/tornado-secure-cookie-expiration-aka-secure-session-cookie
- # Pass expires_days=None to make it a session cookie (which expires when the browser is closed).
- self.set_secure_cookie('user_id', '1', expires_days=None, expires=time.mktime(time.gmtime())+900)
使用 time.mktime(time.gmtime()) 是想获取gmt(国际标准时间), 因为我发现过期时间, 在浏览器中查看是gmt格式的. 结果这种设置, 还是不行, 我这里是有8个小时的差别, 应该是和时区有关系.
后来我改为下面这种直接使用time.time(), 貌似有效了
- def set_current_user(self, user):
- import time
- # http://stackoverflow.com/questions/12383697/tornado-secure-cookie-expiration-aka-secure-session-cookie
- # Pass expires_days=None to make it a session cookie (which expires when the browser is closed).
- self.set_secure_cookie('user_id', '1', expires_days=None, expires=time.time()+900)
这里要说明的是, expires_day=None, 或者expires_day=3, 即3天, 都不会影响expires的, 因为expires比expires_days 的优先级高些. 所以这里设置为15分钟可以简化为:
- def set_current_user(self, user):
- import time
- # http://stackoverflow.com/questions/12383697/tornado-secure-cookie-expiration-aka-secure-session-cookie
- # Pass expires_days=None to make it a session cookie (which expires when the browser is closed).
- self.set_secure_cookie('user_id', '1', expires=time.time()+900)
到这里, tornado设置cookie的过期时间, 就只有这些内容了, 其他的请看tornado的官方文档和源码. 不足之处, 还请留言评论.
tornado设置cookie过期时间(expires time)的更多相关文章
- 五十九:Flask.Cookie之flask设置cookie过期时间
设置cookie有效期1.max_age:距离现在多少秒后过期,在IE8以下不支持2.expires:datatime类型,使用此参数,需参照格林尼治时间,即北京时间-8个小时3.如果max_age和 ...
- 设置COOKIE过期时间的方法
第一,日期运算法 1)将期限设置为当前日期后的第N天的0时0分0秒 Response.Cookies(LastView).Expires=dateadd(d,N,date) 2)将期限设置为当前日期后 ...
- JS设置Cookie过期时间
//JS操作cookies方法! //写cookies function setCookie(name,value) { var Days = 30; var exp = new Date(); ex ...
- 设置 cookie过期时间
cookie.setMaxAge(0);//不记录cookie cookie.setMaxAge(-1);//会话级cookie,关闭浏览器失效 cookie.setMaxAge(60*60);//过 ...
- 如何设置session过期时间为30分钟
今天在我的微博(Laruence)上发出一个问题: 我在面试的时候, 经常会问一个问题: “如何设置一个30分钟过期的Session?”, 大家不要觉得看似简单, 这里面包含的知识挺多, 特别适合考察 ...
- Tornado中Cookie过期问题
首先,web应用程序是使用HTTP协议进行数据传输,因为HTTP协议是无状态的,所以一旦提交数据完成后,客户端和服务器端的连接就会被关闭,再次进行数据的交换就得重新建立新的连接,那么,有个问题就是服务 ...
- Tornado的cookie过期问题
首先,web应用程序是使用HTTP协议进行数据传输,因为HTTP协议是无状态的,所以一旦提交数据完成后,客户端和服务器端的连接就会被关闭,再次进行数据的交换就得重新建立新的连接,那么,有个问题就是服务 ...
- js设置cookie过期及清除浏览器对应名称的cookie
js设置cookie过期也就相当于清除浏览器对应名称的cookie的例子. 代码: function ClearCookie() { var expires = new Date(); expir ...
- php中实现精确设置session过期时间的方法
http://www.jb51.net/article/52309.htm 大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下sessio ...
随机推荐
- VS2010环境下MFC使用DataGrid绑定数据源
如果MFC的软件中 使用DataGrid控件后,在别的电脑上不能运行行,需要拷贝一个 MSDATGRD.ocx 和msstdfmt.dll 文件在软件的目录中,并写一个批处理文件 reg.dat 文 ...
- (转)C# Socket异步通信
本文转载自:http://www.cnblogs.com/llllll/archive/2009/05/13/1455703.html 服务器端 TCPServer 1.使用的通讯通道:socket ...
- 事务之四:Spring事务--原理
一.Spring事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的.对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行: ...
- 1024 Palindromic Number
题意: 给出一个数N(N<=10^10),最多可操作K次(K<=100),每次操作为这个数和其反转之后的数相加,若得到的结果为回文数,则输出:若在K次迭代后仍然不是回文数,在输出第K次操作 ...
- microtime() 测试代码执行时间,提高编码效率
<?php $b_time = microtime(true); $a = array("); $count = ; foreach ($a as $key => $value) ...
- mysql 无意重启 [Note] /usr/sbin/mysqld: Normal shutdown
情况: 今早发现,昨天下午安装的4台mysql服务器,突然出现,由于在shell窗口 (root@localhost:mysql.sock) [(none)]> 190102 18:12:16 ...
- SQL SERVER常用的统计用法
--查询各个状态下总数SET statistics time on Go SELECT END ) AS Q1, END ) AS Q2, END ) AS Q3, END ) AS Q4, END ...
- Android 4 学习(13):Local Broadcast Manager & Intent Filter
参考<Professional Android 4 Development> Local Broadcast Manager 简介 Local Broadcast Manager由Andr ...
- 「小程序JAVA实战」微信开发者工具helloworld(三)
转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-03/ 第一个小程序demo的运行,首选需要去使用开发工具 开发工具下载安装 https://mp. ...
- eth0 no such device(reload)
转载自:http://blog.chinaunix.net/uid-25554408-id-292638.html 今天我在vmware里安装了虚拟机,安装虚拟机就想安装vmware tools(这个 ...