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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值