tornado session
[转]tornado入门 - session
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
创建唯一标识符
import uuid
uuid.uuid4()
tornado默认没有支持session
需要安装第三方
安装Redis 和 pycket
pip install pycket
使用pycket实现基于redis的session
例子
#-*- coding: utf-8 -*-
import tornado.httpserver
import tornado.ioloop
import tornado.web
import os
import tornado.autoreload
from tornado.options import define, options
#2 导入模块
from pycket.session import SessionMixin
define('port', default=8000, help='Run on the given port', type=int)
define('debug', default=False, help='Set debug mode', type=bool)
class HomeHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.render('index.html')
#3 在使用session的handler上继承SessionMixin
class LoginHandler(tornado.web.RequestHandler, SessionMixin):
def get(self, *args, **kwargs):
self.render('login.html')
def post(self, *args, **kwargs):
self.set_secure_cookie('user', self.get_argument('user', None))
#4设置session
self.session.set('user_session_test', self.get_argument('user'))
txt = str(self.session.get('user_session_test'))
#4测试session
self.write('Successully set cookie!, user_session_test value: %s' % txt)
class OtherHtmlHandler(tornado.web.RequestHandler):
def get_current_user(self):
user = self.get_secure_cookie('user')
return user
@tornado.web.authenticated
def get(self, page):
pagename = page + '.html'
path = os.path.join(self.settings['static_path'], pagename)
self.render(pagename)
class CustomApp(tornado.web.Application):
def __init__(self, debug = False):
settings = {
'template_path':os.path.join(os.path.dirname(__file__), 'moban_clean/templates'),
'static_path':os.path.join(os.path.dirname(__file__), 'moban_clean'),
'blog_title': "tornado blog",
'login_url': '/login.html',
'cookie_secret':"2379874hsdhf0234990sdhsaiuofyasop977djdj",
'xsrf_cookies':True,
'debug':debug,
#1 配置pycket 注意别忘记开启redis服务C:\redis>redis-server.exe
'pycket':{
'engine':'redis',
'storage':{
'host':'localhost',
'port': 6379,
'db_sessions':10,
'db_notifications':11,
'max_connections':2**31,
},
'cookies':{
#5 设置过期时间
'expires_days':2,
#'expires':None, #秒
},
}
}
handles = [
(r'/$', HomeHandler),
(r'/login.html', LoginHandler),
(r'/(.+?)\.html', OtherHtmlHandler),
(r'/(.+?\..+)', tornado.web.StaticFileHandler, dict(path=settings['static_path'])),
]
super(CustomApp, self).__init__(handles, **settings)
if __name__ == '__main__':
tornado.options.parse_command_line()
app = CustomApp(debug=options.debug)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
#tornado.autoreload.start()
tornado.ioloop.IOLoop.instance().start()
tornado session的更多相关文章
- 【源代码剖析】tornado-memcached-sessions —— Tornado session 支持的实现(二)
客官您最终回头了! 让我们本着探(zuo)索(si)精神把 session.py 看完吧... 首先看看须要的库: pickle 一个用于序列化反序列化的库(听不懂?你直接看成和 json 一样作用即 ...
- Tornado session 插件 pycket 定制时间和时间续租
功能描述:10分钟用户没有任何操作,跳转到登录页面. 分析:这个功能用session就能实现(由于pycket 的session内容是存储在memcached或者redis里面的.所以,session ...
- tornado 路由、模板语言、session
一:tornado路由系统: 1.面向资源编程: 场景:当我们给别人提供api的时候,往往提供url.比如:电影票api: http://movie.jd.com/book_ticket:预订电影票. ...
- Tornado 简述
前言 python 旗下,群英荟萃,豪杰并起.单是用于 web 开发的,就有 webpy.web2py.bottle.pyramid.zope2.flask.tornado.django 等等,不一而 ...
- Tornado自定义分布式session框架
一.session框架处理请求执行的流程: 1.服务器端生成随机的cookie字符串 2.浏览器发送请求,服务器将cookie返回给浏览器. 3.服务器在生成一个字典.字典的key为cookie,va ...
- Session for Tornado(Redis) - 代码分享
Session for Tornado(Redis) - 代码分享 Session for Tornado(Redis) session id的生成借用了web.py. 使用了 redis 的 h ...
- 为Tornado框架加上基于Redis或Memcached的session 【第三方】
Tornado 没有session,只有cookie_secret,这在一些情况下是不利于开发的.所有我们可以给Tornado加上session的功能. 这篇文章讲解的是依靠第三方包来实现.以后的文章 ...
- tornado自定义session
这开始之前我们先了解以下什么是cookie和session 简单的说: cookie是保存在客户端的键值对 session是保存在服务端的键值对 session依赖与cookie 在Django中,可 ...
- 自定义Tornado的session组件
session和cookie的关系 cookie:保存在客户端浏览器上的键值对 session_id = "eyJ1c2VyX2luZm8iOiJ" session:保存在服务器上 ...
随机推荐
- C# 文章导航
1. C#相关文章 1.1 C# 基础(一) 访问修饰符.ref与out.标志枚举等等 1.2 C# 基础(二) 类与接口 1.3 C# DateTime日期格式化 1.4 C# DateTime与时 ...
- iOS二维码生成、识别、扫描等
二维码扫描 前言: 最近的项目中使用到了二维码,二维码这个模块功能也完成:觉得还是有必要总结一下用来做记录.好长时间没有写二维码了都忘记在差不多了,重新拾起来还是挻快的. 二维码使用场景: 生活中有很 ...
- .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来
从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或 ...
- 谈谈一些有趣的CSS题目(二)-- 从条纹边框的实现谈盒子模型
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- win8.1硬盘安装ubuntu14.04双系统
在网上找了很多方法都失败了,原因是大多数方法都是用mbr方式安装的,如grub4dos,easybcd.以至于连自己都怀疑win8能不能用硬盘安装,差点就去买个u盘来安装了,就在打算放弃的时候在ubu ...
- css常用hack
原文地址:css常用hack 突然想起今天早上在CNZZ看到的统计数据,使用IE6.7的用户比例还真多,看到之后我的心都碎了.微软都放弃了为毛还有这么多人不死心? 所以说,IE下的兼容还是得做的. – ...
- 真正的汉化-PowerDesigner 16.5 汉化
一.背景 经常使用PowerDesigner,之前使用15版本,后来16出来后,就一直在使用16,不过一直是英文.一些同事对使用英文版总显示有些吃力. 遍寻百度.必应,都没有找到真正的针对版本16的汉 ...
- 设置Hyper-V和VMware多个服务之间共存
这个方法是解决多个服务之间不能共存,下面相当于是以Hyper-V和VMware做例子,其他的也适用. 今天准备安装VMware Workstation 10,然后玩玩MAC OS. 没想到,淡定的我双 ...
- linux-图形化远程管理协议
远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...
- Linux系统中的Device Mapper学习
在linux系统中你使用一些命令时(例如nmon.iostat 如下截图所示),有可能会看到一些名字为dm-xx的设备,那么这些设备到底是什么设备呢,跟磁盘有什么关系呢?以前不了解的时候,我也很纳闷. ...