python---redis实现自定义session
SESSION_EXPIRE = 60
SESSION_TYPE = 'Redis'
pool = redis.ConnectionPool(host="localhost",port=)
redi_conn = redis.Redis(connection_pool=pool) class BaseSession:
@classmethod
def get_session_handler(cls,handler):
if config.SESSION_TYPE == "Memery":
obj = MemerySession(handler)
elif config.SESSION_TYPE == "Mamcache":
obj = MemcacheSession(handler)
elif config.SESSION_TYPE == "Redis":
obj = RedisSession(handler)
return obj class RedisSession:
session_id = "py_session" def __init__(self,handler):
self.handler = handler
#从客户端获取随机字符串
client_random_str = self.handler.get_cookie(MemcacheSession.session_id)
#如果获取到了字符串
if client_random_str and redi_conn.exists(client_random_str):
self.random_str = client_random_str
else:
self.random_str = self.__genarate_random_str()
redi_conn.hset(self.random_str,None,None)
redi_conn.expire(self.random_str,config.SESSION_EXPIRE)
expires_time = time.time() + config.SESSION_EXPIRE
handler.set_cookie(MemerySession.prex_str, self.random_str, expires=expires_time) def __setitem__(self, key, value):
redi_conn.hget(self.random_str,key)
redi_conn.hset(self.random_str, key,value)
redi_conn.expire(self.random_str, config.SESSION_EXPIRE) def __getitem__(self, item):
ret = redi_conn.hget(self.random_str,item)
return ret def __delitem__(self, key):
redi_conn.hdel(self.random_str,key)
redi_conn.expire(self.random_str, config.SESSION_EXPIRE) def __genarate_random_str(self):
obj = hashlib.md5()
obj.update(bytes(str(time.time()),encoding="utf8"))
random_str=obj.hexdigest()
return random_str
注意:
1.redis中获取数据类型为bytes,在进行比较,例如验证码比较时,需要进行类型转换
if str(self.session['code'].lower(),encoding="utf8") != self.get_argument('code').lower():
status['status'] = False
status['error'] = "验证码错误"
或者将接受的数据转换为bytes类型
2.存放数据如果为其他类型
需要在使用时使用eval执行,是原来字符串转为数据类型
python---redis实现自定义session的更多相关文章
- Python web框架 Tornado(三)自定义session组件
我们在学习Django框架的过程中,内部封装了session组件,以方便于我们使用进行验证.但是Tornado框架是没有session的,所以如果想使用session的话,就需要我们自己定制相对应的组 ...
- Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架
Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session import tornado.ioloop import tornado.web from myhas ...
- Tornado之自定义session
面向对象基础 面向对象中通过索引的方式访问对象,需要内部实现 __getitem__ .__delitem__.__setitem__方法 #!/usr/bin/env python # -*- ...
- [Python自学] day-22 (1) (Session、CSRF、中间件)
一.响应函数补充 三种返回响应的方式: return HttpResponse() return render() return redirect() HttpResponse: 除了能够返回字符串, ...
- 基于redis的处理session的方法
一个基于redis的处理session的方法,如下. <?php class Session_custom { private $redis; // redis实例 private $prefi ...
- Asp.net Mvc 自定义Session (一),
大家都知道用系统默认的session 会存在这样的问题 如果用户过多的话 session 会自动消亡,而且不能支持分布式和集群. 这系列博客主要讲解 怎样 解决用户过多的session自动消亡,和分 ...
- SpringBoot进阶教程(二十六)整合Redis之共享Session
集群现在越来越常见,当我们项目搭建了集群,就会产生session共享问题.因为session是保存在服务器上面的.那么解决这一问题,大致有三个方案,1.通过nginx的负载均衡其中一种ip绑定来实现( ...
- 负载均衡中使用 Redis 实现共享 Session
最近在研究Web架构方面的知识,包括数据库读写分离,Redis缓存和队列,集群,以及负载均衡(LVS),今天就来先学习下我在负载均衡中遇到的问题,那就是session共享的问题. 一.负载均衡 负载均 ...
- flask自定义session
根据内置session原理可以进行session的定制: #!/usr/bin/env python # -*- coding:utf-8 -*- import uuid import json fr ...
- 170222、使用Spring Session和Redis解决分布式Session跨域共享问题
使用Spring Session和Redis解决分布式Session跨域共享问题 原创 2017-02-27 徐刘根 Java后端技术 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用 ...
随机推荐
- mybatis逆向工程生成example的问题
如果不想生成example,在 targetRuntime="MyBatis3" 处修改为 targetRuntime="MyBatis3Simple" & ...
- Xshell连接到centos提示Could not connect to (port 22): Connection failed
关于XShell连接虚拟机中的centos系统的问题,在连接的时候报错如下: 一开始以为是系统的问题,但是搞了很久,才发现是虚拟机这个软件本身的问题,的确坑啊!所以解决方法也很简单.在编辑菜单那里打开 ...
- HDU 2024 C语言合法标识符
http://acm.hdu.edu.cn/showproblem.php?pid=2024 Problem Description 输入一个字符串,判断其是否是C的合法标识符. Input 输入 ...
- Docker attach
Description Attach local standard input, output, and error streams to a running container Usage dock ...
- ngnix使用超时响应时间配置避坑一例
ngnix的超时响应时间配置得比tomcat的spring mvc响应时间还小,悲剧就发生了,生产环境还不易发现. 就好比定制固定木柜没考虑进门的尺寸,横竖斜都进不去,太悲剧了.哈哈哈,以此为鉴!~
- PHP hexdec() 函数
hexdec() 函数把十六进制转换为十进制. 语法 hexdec(hex_string) 参数 描述 hex_string 必需.规定要转换的十六进制数. 说明 返回与 hex_string 参数所 ...
- PSP(4.20——4.26)以及周记录
1.PSP 4.20 8:45 9:25 10 30 Cordova A Y min 13:00 17:00 65 175 Cordova A Y min 4.21 9:00 17:00 125 35 ...
- Linux基础学习(5)--文本编辑器Vim
第五章——文本编辑器Vim 一. Vim常用操作 1.Vim简介: Vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立.编辑. ...
- BZOJ1828[USACO 2010 Mar Gold 2.Barn Allocation]——贪心+线段树
题目描述 输入 第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数C_i * 第N+2到N+M+1行: 第i+N+1行表示2个整数 A_i和B_i 输出 * 第一行: ...
- Food HDU - 4292 (结点容量 拆点) Dinic
You, a part-time dining service worker in your college’s dining hall, are now confused with a new pr ...