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

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

        import tornado.ioloopimport tornado.webfrom myhash import ringcreate_session_id = 'sasd' # 随机生成的 session 函数class SessionGen(object):container = {}def __init__(self,handler):self.handler = handlerrandom_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_idself.container[random_str]={}  # session 字典self.random_str = random_strself.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] = valuedef __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='')  # 渲染templatedef 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'] = usernameself.redirect('/index')returnself.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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于结构体的二进制文件读写

基于结构体的二进制文件读写项目介绍工程创建结构体的创建写二进制文件结果读二进制文件结果参考文献项目介绍 本次设计是为了提高读写二进制文件的效率,以约定的结构体形式进行读写操作,避免了一个字节一个字节的多次写入读取操作,并且能以…

排序算法-希尔排序

上一篇讲解了简单插入排序算法,以及在其基础上优化的二分插入排序算法,但是每次插入需要按间隔为 1 移动有序区的元素,效率不高,下面我们来介绍一种新的插入排序算法-希尔排序。 算法简介 希尔排序(Shell Sort&#xf…

封包时发现的关于QIODevice类write函数的坑

关于QIODevice类write函数的坑问题概述问题部分代码问题解决结论问题概述 这两天在做TCP通信的封包解包协议操作时,不经意间被write函数坑了好久。通过内存复制进行数据封包,在写入socket的时候总是写入一个字节,不能全部写入数据&#xff0…

java c++ python哪个好_程序员学java好还是python语言好 c++又如何

技术程序员学Java、C、Python... 分析对比,到底学什么语言吃香,哪种语言最靠谱,如何学好这些语言呢?几天前,我们在知识上看到这样一个问题:“java,C,Python,走&#xff0…

Qt多文件传输功能实现及方法概述

Qt多文件传输功能实现前言代码实现概述客户端代码实现服务端代码效果展示结论前言 本次设计主要是为了功能上的实现,因此对于ui界面的设计都是怎么简单怎么来的,主要的功能就是实现多个文件的发送与接收,即客户端发送,服务端接收…

jedispool redis哨兵_Redis详解(九)------ 哨兵(Sentinel)模式详解

在上一篇博客----Redis详解(八)------ 主从复制,我们简单介绍了Redis的主从架构,但是这种主从架构存在一个问题,当主服务器宕机,从服务器不能够自动切换成主服务器,为了解决这个问题,我们又介绍了哨兵模式,本篇博客我们继续深入的介绍一下这种模式.1、架构图2、服务器列表3、搭…

从java到C++入门

C基础知识前言基础前言 当初为了赶一波互联网热潮自学了java,如今因为需要就从java转向C开发,于是就有了java到C入门,每次的学习我都会记录一下C的学习历程。 基础 C对于内存的控制管理比java要有更多要求,因此C对于变量的创建…

wordpress 外部数据接口_使用接口方式获取WordPress用户信息的方法

今天WordPress主题站简单介绍一下WordPress系统中用户信息获取方式,今天就讲讲使用接口方式获取WordPress用户信息的方法。接口文件如下:if (POST ! $_SERVER[REQUEST_METHOD]) {header(Allow: POST);header(HTTP/1.1 405 Method Not Allowed);header(Co…

结构体内存拷贝的两种方法

结构体内存拷贝的两种方法前言内容总结前言 最近看一些代码,发现内存拷贝的两种方式,下面我就来介绍一下两种方式。 内容 首先定义一个结构体processorHead.h: #pragma pack(1)typedef struct {short b;int c;long long d; }DATA;#pragma…

大学物理实验长度的测量实验报告_大学物理实验教案长度和质量的测量两篇

大学物理实验教案长度和质量的测量两篇篇一:大学物理实验教案4--长度测量大学物理实验教案实验目的:1.掌握游标卡尺、螺旋测微计和移测显微镜的测量原理和使用方法。 2.根据仪器的精度和有效数字的定义,正确记录原始数…

Linux命令应用大词典-第25章 备份与还原

25.1 mkisofs:创建ISO9660/Joliet/hfs文件系统转载于:https://www.cnblogs.com/tqtl911/p/8661006.html

C++灵魂->指针

C灵魂->指针地址指针野指针空指针 【内存动态分配】指针变量的运算(,-,,--)指针与一维数组地址 计算机将内存以单个字节为单位分开,并对每个字节进行唯一性编号,那么这个编号就是地址。 取…

cpython cython_python – 优化Cython中的字符串

我建议你在cpython.array.arrays上进行你的操作.最好的文档是C API和Cython源码,我太懒了链接了.from cpython cimport arraydef cfuncA():cdef str acdef int i,jfor j in range(1000):a .join([chr(i) for i in range(127)])def cfuncB():cdef:str aarray.array[char] arr,t…

团队协作小结

0.前提:协作目标保持一致,目标理解一致。 1.量化工作内容,以工作量算,可以适当结合成员自身特点划分内容。 2.职责明确,工作块必须有一名负责人,不要搞多人化,防止责任推诿。 转载于:https://ww…

TCP解决粘包问题(结构数据封包拆包)

TCP封包拆包前言封包一、包结构二、封包方法拆包总结前言 TCP协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的通信协议,即TCP采用字节流的方式,以字节为单位传输字节序列。 如果简单的发送长串的数据流&#xf…

mac下nvm_mac中nvm的安装和使用

nvm 是 Mac 下的 node 管理工具,如果是管理 Windows 下的 node,可以使用 nvmw 或 nvm-windows 。一、若电脑中已安装node,需先卸载。参考学习的文档:http://blog.csdn.net/zjuwwj/article/details/72805671npm ls -g --depth0# 查看已经安装在…

求交错序列前N项和(15 分)

7-2 求交错序列前N项和(15 分) 本题要求编写程序,计算交错序列 1-2/33/5-4/75/9-6/11... 的前N项之和。 输入格式: 输入在一行中给出一个正整数N。 输出格式: 在一行中输出部分和的值,结果保留三位小数。 输入样例: 5输出样例: 0.…

拆包--缓冲区查找包头及包尾偏移

缓冲区查找包头及包尾偏移前言一、采用动态数组QByteArray的自带函数二、采用字节对比方法测试代码前言 根据前面所讲的内容封包拆包,当将网络中的数据读出存储在自定义缓冲区QByteArray中,则对数据包进行拆分。则首先要进行的工作就是找到包头的位置及…

5自适应单页源码_超详细!如何建立一个CPA单页网站,附高转化CPA模板源码

做CPA的老手一般都会建立一个CPA单页站,用来提升转化,提高推广质量。今天教大家搭建一个完整的CPA单页站搭建一个网站需要3样东西:域名服务器网站源码一、购买域名域名就是你网站的地址,建议从万网购买就可以,比较方便…

20154319 《网络对抗技术》后门原理与实践

一、实验说明 任务一:使用netcat获取主机操作Shell,cron启动 (0.5分) 任务二:使用socat获取主机操作Shell, 任务计划启动 (0.5分) 任务三:使用MSF meterpreter(或其他软件)生成可执行文件,利用…