博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架
阅读量:5124 次
发布时间:2019-06-13

本文共 3281 字,大约阅读时间需要 10 分钟。

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()

转载于:https://www.cnblogs.com/big-handsome-guy/p/8654462.html

你可能感兴趣的文章
基于上一篇AS项目依赖库问题的优化解决方案
查看>>
Java——操作集合的工具类:Collections
查看>>
Discuz3.3精仿小米风格整站模板制作——1、新建模板方案
查看>>
挺好用的Markdown写法
查看>>
C# ADO.NET
查看>>
快速排序算法
查看>>
HDU 1394 Minimum Inversion Number
查看>>
JQuery方法
查看>>
P1049 装箱问题
查看>>
第一百二十六节,JavaScript,XPath操作xml节点
查看>>
LightOJ 1393 Crazy Calendar(博弈)题解
查看>>
第一步:Axure 使用svn多人协作产品开发(提交文件)
查看>>
用IIS配置反向代理
查看>>
sufeinet
查看>>
论算法的实际应用——泡妞论
查看>>
HTTP 错误 404.3 – Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。...
查看>>
js和layerjs配合实现的拖拽表格列
查看>>
Spring MVC集成slf4j-logback
查看>>
java常量池
查看>>
URL类
查看>>