Session for Tornado(Redis) - 代码分享
Session for Tornado(Redis) - 代码分享
Session for Tornado(Redis)
session id的生成借用了web.py。
使用了 redis 的 hash 储存。
只有在为session赋值的时候才会生成session_id,是为了必要的情况下的使用(例如oAuth2的state和验证码)[代码] [Python]代码
#coding=utf8 import os, time
from core.options import options
from hashlib import sha1 class Session(object):
_prefix = "_session:"
_id = None
_skip = ['_redis','_request','_id']
def __init__(self,request):
self._redis = request.redis
self._request = request
#init session id
id = request.get_secure_cookie('sessionid')
if id and self._redis.exists(id):
self._id = id def init_session(self):
"""初始化"""
if not self._id:
self._id = self.generate_session_id()
self._request.set_secure_cookie('sessionid',self._id)
#延期过期时间
self._redis.hset(self._id,'lastActive',time.time())
self._redis.expire(self._id,options.session_maxlifetime) def generate_session_id(self):
"""Generate a random id for session"""
secret_key = self._request.settings['cookie_secret']
ip = self._request.request.remote_ip
while True:
rand = os.urandom(16)
now = time.time()
sessionid = sha1("%s%s%s%s" % (rand, now,ip, secret_key))
sessionid = self._prefix + sessionid.hexdigest()
if not self._redis.exists(sessionid):
break
return sessionid def __getattr__(self, name):
if self._id:
return self._redis.hget(self._id,name)
return object.__getattribute__(self, name) def __setattr__(self, name, value):
if not name in self._skip:
self.init_session()
self._redis.hset(self._id,name,value)
object.__setattr__(self, name, value) def __delattr__(self, name):
if not name in self._skip:
return self._redis.hdel(self._id,name)
object.__delattr__(self, name)
Session for Tornado(Redis) - 代码分享的更多相关文章
- 将Session放入Redis
默认情况下,我们的PHP是以文件的形式保存Session数据,所以,每次读写会话信息,就需要去访问硬盘. 为了解决会话信息夸域名问题,即为了实现同一时刻只能一个地方登录,同时也解决读写会话信息必须访问 ...
- 转载:使用Tornado+Redis维护ADSL拨号服务器代理池
我们尝试维护过一个免费的代理池,但是代理池效果用过就知道了,毕竟里面有大量免费代理,虽然这些代理是可用的,但是既然我们能刷到这个免费代理,别人也能呀,所以就导致这个代理同时被很多人使用来抓取网站,所以 ...
- springboot项目中的普通Session和使用redis存储session
普通session: session store type使用来存放session的存储方式,目前Spring boot中只支持Redis方式, 由于本应用暂无需将session放入redis的需求, ...
- JAVA基础代码分享--求圆面积
问题描述 用户输入圆的半径,计算并显示圆的面积 代码分享 /** * @author hpu-gs * 2015/11/25 */ public class Circle { public stati ...
- JAVA基础代码分享--DVD管理
问题描述 为某音像店开发一个迷你DVD管理器,最多可存6张DVD,实现碟片的管理. 管理器具备的功能主要有: 1.查看DVD信息. 菜单选择查看功能,展示DVD的信息. 2.新增DVD信息 选择新增功 ...
- JAVA基础代码分享--学生成绩管理
问题描述: 从键盘读入学生成绩,找出最高分,并输出学生成绩等级. 成绩>=最高分-10 等级为’A’ 成绩>=最高分-20 等级为’B’ 成绩>=最高分-30 等级为’C’ ...
- jQuery插件库代码分享 - 进阶者系列 - 学习者系列文章
这些天将原来在网上找的jQuery插件进行了下整理,特此将代码分享出来给大家. 见下图结构. 对目录结构进行了分类.这里是插件列表. 这里总共收集了20来个插件.还有下面未进行划分的. 下面是DEMO ...
- .net之工作流工程展示及代码分享(四)主控制类
现在应该讲主控制类了,为了不把系统弄得太复杂,所以就用一个类作为主要控制类(服务类),作为前端.后端.业务逻辑的控制类. WorkflowService类的类图如下: 该类的构造函数: public ...
- .net之工作流工程展示及代码分享(三)数据存储引擎
数据存储引擎是本项目里比较有特色的模块. 特色一,使用接口来对应不同的数据库.数据库可以是Oracle.Sqlserver.MogoDB.甚至是XML文件.采用接口进行对应: public inter ...
随机推荐
- mysql-5.6.17-winx64 免安装 配置
[client] default_character_set=utf8 port=3306 [mysql] # 设置mysql客户端默认字符集 default_character_set=utf8 [ ...
- ASP.NET jQuery 随笔 从DropDownList获取选择的text和value值
jQuery来获取DropDownList的Text/Value属性值,代码如下 <%@ Page Language="C#" AutoEventWireup="t ...
- fstream,ifstream,ofstream 详解与用法
fstream,istream,ofstream 三个类之间的继承关系 fstream :(fstream继承自istream和ofstream)1.typedef basic_fstream< ...
- 奔小康赚大钱(km)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- IBATIS动态SQL
转自:http://www.cnblogs.com/phoebus0501/archive/2011/05/16/2048126.html 直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值 ...
- 程序中使用事务来管理sql语句的执行,执行失败时,可以达到回滚的要求。
1.设置使用事务的SQL执行语句 /// <summary> /// 使用有事务的SQL语句 /// </summary> /// <param name="s ...
- PigCms 回复消息 "域名授权错误! 您使用的微信平台或源码为盗版"
本文地址:http://duwei.cnblogs.com/ Pigcms 将自动回复的API 写死了, 这里提供一个可用的API 在 PigCms/Lib/Action/Home/Weixinact ...
- jQuery UI Widget 原理
先看下代码的相关注释: /*! * jQuery UI Widget 1.8.1 * * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/abo ...
- Ural 1313 - Some Words about Sport
Ural doctors worry about the health of their youth very much. Special investigations showed that a l ...
- iOS- 三步快速集成社交化分享工具ShareSDK
http://www.cnblogs.com/qingche/p/3727559.html 1.前言 作为现在App里必不可少的用户分享需要,社交化分享显然是我们开发app里较为常用的. 最近因为公司 ...