1. import config
  2. import hashlib
  3. import time
  4. import memcache
  5. import json
  6.  
  7. conn = memcache.Client(["127.0.0.1:8081"],debug=True)
  8.  
  9. class BaseSession:
  10. @classmethod
  11. def get_session_handler(cls,handler):
  12. if config.SESSION_TYPE == "Memery":
  13. obj = MemerySession(handler)
  14. elif config.SESSION_TYPE == "Mamcache":
  15. obj = MemcacheSession(handler)
  16. elif config.SESSION_TYPE == "Redis":
  17. obj = RedisSession(handler)
  18. return obj
  19.  
  20. class MemcacheSession:
  21. session_id = "py_session"
  22.  
  23. def __init__(self,handler):
  24. self.handler = handler
  25. #从客户端获取随机字符串
  26. client_random_str = self.handler.get_cookie(MemcacheSession.session_id)
  27. #如果获取到了字符串
  28. if client_random_str and conn.get(client_random_str):
  29. self.random_str = client_random_str
  30. else:
  31. self.random_str = self.__genarate_random_str()
  32. conn.set(self.random_str,json.dumps({}),config.SESSION_EXPIRE)
  33. conn.set(self.random_str,conn.get(self.random_str),config.SESSION_EXPIRE)
  34. expires_time = time.time() + config.SESSION_EXPIRE
  35. handler.set_cookie(MemerySession.prex_str, self.random_str, expires=expires_time)
  36.  
  37. def __setitem__(self, key, value):
  38. ret = conn.get(self.random_str)
  39. ret_dict = json.loads(ret)
  40. ret_dict[key]=value
  41. conn.set(self.random_str, json.dumps(ret_dict), config.SESSION_EXPIRE)
  42.  
  43. def __getitem__(self, item):
  44. ret = conn.get(self.random_str)
  45. ret_dict = json.loads(ret)
  46. return ret_dict.get(item,None)
  47.  
  48. def __delitem__(self, key):
  49. ret = conn.get(self.random_str)
  50. ret_dict = json.loads(ret)
  51. del ret_dict[key]
  52. conn.set(self.random_str, json.dumps(ret_dict), config.SESSION_EXPIRE)
  53.  
  54. def __genarate_random_str(self):
  55. obj = hashlib.md5()
  56. obj.update(bytes(str(time.time()),encoding="utf8"))
  57. random_str=obj.hexdigest()
  58. return random_str

python---基于memcache的自定义session类的更多相关文章

  1. 实现基于Memcache存储的Session类

    自主实现Session功能的类,基于文件方式存储Session数据,测试基本通过,还比较好玩,实际应用没有意义,只不过是学习Session是如何实现的. 使用基于文件的Session存取瓶颈可能都是在 ...

  2. 实现基于文件存储的Session类

    自主实现Session功能的类,基于文件方式存储Session数据,测试基本通过,还比较好玩,实际应用没有意义,只不过是学习Session是如何实现的. 一般基于文件存储Session数据效率不是很高 ...

  3. 自定义Session类实现

    public class CustomizeSession { private HttpSessionState _sesssion = HttpContext.Current.Session; pu ...

  4. 基于django的自定义简单session功能

    基于django的自定义简单session功能 简单思路: 1.建立自定义session数据库 2.登入时将用户名和密码存入session库 3.将自定义的随机session_id写入cookie中 ...

  5. Python web框架 Tornado(三)自定义session组件

    我们在学习Django框架的过程中,内部封装了session组件,以方便于我们使用进行验证.但是Tornado框架是没有session的,所以如果想使用session的话,就需要我们自己定制相对应的组 ...

  6. .Net 基于Memcache集群的分布式Session

    简述 基于Memcache的Session大家都各有各的说法,比方说:当memcached集群发生故障(比如内存溢出)或者维护(比如升级.增加或减少服务器)时,用户会无法登录,或者被踢掉线等等,每种技 ...

  7. Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架

    Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session import tornado.ioloop import tornado.web from myhas ...

  8. 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)

    并发编程概述   前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...

  9. ThinkPHP3验证码、文件上传、缩略图、分页(自定义工具类、session和cookie)

    验证码 TP框架中自带了验证码类 位置:Think/verify.class.php 在LoginController控制器中创建生存验证码的方法 login.html登陆模板中 在LoginCont ...

随机推荐

  1. [CB]2018全球半导体营收4700亿美元 三星继续碾压英特尔

    2018全球半导体营收4700亿美元 三星继续碾压英特尔 https://www.cnbeta.com/articles/tech/808833.htm Gartner最新报告显示,2018年全球半导 ...

  2. Jenkins Jfrog Artifactory 以及docker下的pipeline 容器编排实践

    1. 测试环境情况: Docker主机 10.24.101.99 JFrog Artifactory 主机 (admin password) jenkinx github原始地址:https://gi ...

  3. flask+mako+peewee(下)(解决了Error 2006: MySQL server has gone away)

    这篇主要介绍在这次项目中使用的peewee 文档地址:http://peewee.readthedocs.org/en/latest/index.html 首先我们要初始化一个数据库连接对象.这里我使 ...

  4. 关于ArcGIS常用功能的实现

    关于ArcGIS中常见的一些功能的总结,一般首先在前台中放置地图,代码如下所示: <esri:Map Grid.Row="0" Grid.Column="0&quo ...

  5. java List<String>的初始化

    今天在处理生成excel的时候用到了java的list,但是需要直接赋值固定的几个变量,如果先初始化然后add的方法: List<String> name = new ArrayList( ...

  6. prettier & codes format

    prettier & codes format https://prettier.io/playground/ https://github.com/collections/front-end ...

  7. Java之JSON处理(JSONObject、JSONArray)

    依赖包:json-20180130.jar MAVEN地址: <dependency> <groupId>org.json</groupId> <artifa ...

  8. Web项目替换jar包中的文件的方法

    经常遇到这样的问题,需要修改jar包中的方法.应该如何做? 1.有些很人性化的框架jar包,比如SpringSecurity,可以修改配置文件指定一个新建的类,让类实现Jar包中的对应的接口就好了. ...

  9. 学习Spring Boot:(二十五)使用 Redis 实现数据缓存

    前言 由于 Ehcache 存在于单个 java 程序的进程中,无法满足多个程序分布式的情况,需要将多个服务器的缓存集中起来进行管理,需要一个缓存的寄存器,这里使用的是 Redis. 正文 当应用程序 ...

  10. [luogu1373]小a和uim之大逃离【动态规划】

    传送门:https://www.luogu.org/problemnew/show/P1373 定义状态是:\(f[i][j][h][0..1]\)表示在\([i,j]\)两个人相差为h,让某一个人走 ...