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实现负载均衡,最常用 ...
随机推荐
- ajax 异步请求 代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- SpringMVC一例 是否需要重定向
在ASP.NET MVC下: return view("List") 和 return RedirectToAction("List") 百度知道的最佳答案: ...
- 安装rlwrap 的简单方法
1. 下载安装 epel包 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 2. 安装r ...
- centos7改中文
centos7的与centos6有少许不同: 1.安装中文包: root@iZj6cbstl2n6r280a27eppZ tmp]# yum groupinstall "fonts" ...
- delphi 导出到excel的第1种方法
第一种方法delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):bo ...
- BZOJ3963 WF2011MachineWorks(动态规划+斜率优化+cdq分治)
按卖出时间排序后,设f[i]为买下第i台机器后的当前最大收益,则显然有f[i]=max{f[j]+gj*(di-dj-1)+rj-pi},且若此值<0,应设为-inf以表示无法购买第i台机器. ...
- Laravel框架简单的用户管理[CURD]操作
一个基于laravel和bootstrap的简单的用户管理,适合刚入门的我们,在做的过程中可以加深自己对laravel基础理解,里面存在一些问题,还未修改,比如css和js的引入,表单提交地址等不规范 ...
- 类加载过程&对象的创建过程
类加载过程 1.JVM发现要使用一个类,首先要到方法区中找:如果找到了,就直接使用,如果没有找到,才会去找这个类的class文件,然后加载: (在找class文件时,是根据classpath配置的地址 ...
- Lights inside a 3d Grid UVA - 11605(概率)
题意: 给出一个n * m * h的空间 每次任意选择两个点 使得在以这两个点连线为对角线的空间的点的值 取反 (初始为0) 求经过k次操作后最后有多少点的值为1 解析: 遇到坐标分维去看 把三 ...
- Leading and Trailing LightOJ - 1282 (取数的前三位和后三位)
题意: 求n的k次方的前三位 和 后三位 ...刚开始用 Java的大数写的...果然超时... 好吧 这题用快速幂取模求后三位 然后用一个技巧求前三位 ...orz... 任何一个数n均可以表示 ...