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

        import tornado.ioloop
import tornado.web
from myhash import ring create_session_id = 'sasd' # 随机生成的 session 函数 class SessionGen(object):
container = {} def __init__(self,handler):
self.handler = handler
random_str = self.handler.get_cookie('session_id')
if not random_str:
random_str = create_session_id # 生成session随机字符串
else:
if random_str not in self.container: # 伪造的session随机字符串
random_str = create_session_id
self.container[random_str]={} # session 字典
self.random_str = random_str
self.handler.set_cookie('session_id',random_str,max_age=10) def __setitem__(self, key, value):
# 基于redis 分布式 设置 session
# import redis
# result = ring.get_node('ascf') # 获取分布式 分配的 ip端口 ;split
# conn = redis.Redis(host='ip',port=232)
# conn.hset('ascf',key,value) self.container[self.random_str][key] = value def __getitem__(self, item):
# 基于redis 分布式 获取 session
# import redis
# result = ring.get_node('ascf') # 获取分布式 分配的 ip端口 ;split
# conn = redis.Redis(host='ip',port=port)
# return conn.hget('ascf',item)
return self.container[self.random_str].get(item) def __delitem__(self, key):
if self.container[self.random_str].get(key):
del self.container[self.random_str][key]
# 基于redis 分布式 删除 session
# import redis
# ip,port = ring.get_node('ascf').split(':') # 获取分布式 分配的 ip端口 ;split
# conn = redis.Redis(host='ip',port=232)
# conn.hdel('ascf',key) class LoginHandler(tornado.web.RequestHandler): def initialize(self):
self.session = SessionGen(self) def get(self):
self.render('login.html',msg='') # 渲染template def post(self):
username = self.get_argument('username')
pwd = self.get_argument('pwd')
if username == 'root' and pwd == '123':
self.set_cookie('user',username)
self.session['user'] = username
self.redirect('/index')
return self.render('login.html',**{'msg':'用户密码有误'}) class IndexHandler(tornado.web.RequestHandler): def initialize(self):
self.session = SessionGen(self) def get(self):
if self.session['user']:
self.write('ojbk') settings = {
'template_path':'templates',
'static_path':'static',
'static_url_prefix':'/static/', # 静态文件 url
# 'xsrf_cookies':True, # csrf } # 配置模板文件路径 application = tornado.web.Application([
(r"/login",LoginHandler),
(r"/index",IndexHandler), ],**settings # 配置文件
) if __name__ == '__main__':
# 创建socket对象
application.listen(8000)
# conn,add = socket.accept()
tornado.ioloop.IOLoop.instance().start()

Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架的更多相关文章

  1. 从零到一手写基于Redis的分布式锁框架

    1.分布式锁缘由 学习编程初期,我们做的诸如教务系统.成绩管理系统大多是单机架构,单机架构在处理并发的问题上一般是依赖于JDK内置的并发编程类库,如synchronize关键字.Lock类等.随着业务 ...

  2. 基于redis实现分布式Session

    学习到好的知识还是需要记录下来的. 开发环境 asp.net mvc4,iis.asp.net 自带的session机制存在诸多不好的地方.先只要列出几点. asp.net mvc 默认的sessio ...

  3. 基于ZooKeeper的分布式Session实现(转)

    1.   认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被 ...

  4. 基于ZooKeeper的分布式Session实现

    1.   认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被 ...

  5. Java Web学习总结(20)——基于ZooKeeper的分布式session实现

    1.   认识ZooKeeper ZooKeeper-- "动物园管理员".动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始 ...

  6. 基于redis的处理session的方法

    一个基于redis的处理session的方法,如下. <?php class Session_custom { private $redis; // redis实例 private $prefi ...

  7. 基于Redis缓存的Session共享(附源码)

    基于Redis缓存的Session共享(附源码) 在上一篇文章中我们研究了Redis的安装及一些基本的缓存操作,今天我们就利用Redis缓存实现一个Session共享,基于.NET平台的Seesion ...

  8. 基于Dubbo的分布式事务框架(LCN)

    原文地址:http://原文地址:https://github.com/1991wangliang/transaction 基于Dubbo的分布式事务框架(LCN) 该框架依赖Redis/dubbo/ ...

  9. Spring+Shiro搭建基于Redis的分布式权限系统(有实例)

    摘要: 简单介绍使用Spring+Shiro搭建基于Redis的分布式权限系统. 这篇主要介绍Shiro如何与redis结合搭建分布式权限系统,至于如何使用和配置Shiro就不多说了.完整实例下载地址 ...

随机推荐

  1. Spring Security核心概念介绍

    Spring Security是一个强大的java应用安全管理库,特别适合用作后台管理系统.这个库涉及的模块和概念有一定的复杂度,而大家平时学习Spring的时候也不会涉及:这里基于官方的参考文档,把 ...

  2. CSS控制滚动条的样式

    到今天(2018年10月25日)为止, 这还是chrome上的一个实验性特性: ::-webkit-scrollbar{width:4px;height:4px;} ::-webkit-scrollb ...

  3. 编程之美——求1~N的整数中1的个数

    为了依次求个位,十位,百位中1的个数,我们可以把这个数字分为三部分,高位数字,当前位数字,低位数字. 如果当前位为0,那么此位为1的数目与高位数字有关 如果当前位为1,那么此位为1的数目与高位和地位都 ...

  4. c++之迭代器失效

    1.首先从一到题目开始谈说起迭代器失效.有时我们很自然并且自信地 用下面方法删除vector元素: #include <iostream>#include <stdio.h># ...

  5. Spring Cloud 坑点

    1 配置中心 1.config 默认Git加载 通过spring.cloud.config.server.git.uri指定配置信息存储的git地址,比如:https://github.com/spr ...

  6. Mysql uploader File

    前几天和哥们做一次渗透测试,内网情况.防护相当严格. 内网不允许访问DMZ,DMZ不允许访问内网,除了服务端口,比如80,3306. 经过长时间的分析,就发现本机连接了内网的一个MYQL,发现WEB开 ...

  7. Lucene 更新、删除、分页操作以及IndexWriter优化

    更新操作如下: 注意:通过lukeall-1.0.0.jar 查看软件,我们可以看到,更新其实是先删除在插入, 前面我们知道索引库中有两部分的内容组成,一个是索引文件,另一个是目录文件, 目前我们更新 ...

  8. 检签 sub sup应用

    <html> <body> <b>This text is bold</b> <br /> <strong>This text ...

  9. 如何将本地的项目上传到git

    如何将本地的项目上传到git 1 进入项目文件夹,把目录变为git仓库 git init 2 把文件添加到版本库中 git add . 3 把版本提交到版本库 git commit -m 'first ...

  10. IOS - 前台时的推送弹窗效果

    作者:Pikacode 原文链接:http://www.jianshu.com/p/67864e1c2085 本文获作者授权转载 或许很多童鞋还不知道,在 iOS 中收到推送通知时,如果 App 处于 ...