python tornado 自定义session

python tornado 中需要自定session

session原理:

  1.客户端发送请求信息,服务端为用户端生成一个加密随机字符串random_str,然后将用户的信息作为这个随机字符串random_str的值,增加用户信息的安全性;

  2.将random_str做为cookie写入给客户端,然后服务端进行判断用户携带cookie的情况

 1 import tornado.web
 2 import tornado.ioloop
 3
 4 class Session():
 5     def __init__(self,handler):
 6         self.random_str = None
 7         self.handler = handler
 8     def __random_str(self):
 9         ‘‘‘生成随机字符串‘‘‘
10         import hashlib
11         import time
12         obj = hashlib.md5()
13         obj.update(bytes(str(time.time()), encoding=‘utf-8‘))
14         random_str = obj.hexdigest()
15         return random_str
16
17     def __setitem__(self,key,value):
18         ‘‘‘设置用户信息‘‘‘
19         random_str = self.handler.get_cookie(‘user_cookie‘)
20         if not self.random_str:
21             if not random_str:
22                 random_str = self.__random_str()
23                 container[random_str]={}
24             else:
25                 if random_str in container.keys():
26                     pass
27                 else:
28                     random_str = self.__random_str()
29                     container[random_str]={}
30             self.random_str = random_str
31         container[self.random_str][key] = value
32         self.handler.set_cookie(‘user_cookie‘,self.random_str)
33     def __getitem__(self,key):
34         ‘‘‘获取用户信息‘‘‘
35         random_str = self.handler.get_cookie(‘user_cookie‘)
36         if not random_str:
37             return None
38         user_info_dict = container.get(random_str,None)
39         if not user_info_dict:
40             return None
41         value = user_info_dict.get(key,None)
42         return value
43 container={}
44 class BaseHandler(tornado.web.RequestHandler):
45     def initialize(self):
46         self.session =Session(self)
47 class IndexHandler(BaseHandler):
48     def get(self):
49         if self.get_argument(‘user‘,None) in ["jam","nina"]:
50             self.session[‘is_login‘] =True
51             self.session[‘name‘] = self.get_argument(‘user‘,None)
52             self.write(‘登录成功‘)
53             self.redirect(‘/manager‘)
54         else:
55             self.render(‘index.html‘,item = ‘请登录‘)
56
57 class ManagerHandler(BaseHandler):
58     def get(self):
59         val = self.session[‘is_login‘]
60         if val:
61             self.write(‘user:%s‘%self.session[‘name‘])
62         else:
63             self.render(‘index.html‘,item=‘login fail‘)
64 settings={
65     "template_path":"views",
66 }
67
68 application = tornado.web.Application([
69     (r‘/index‘,IndexHandler),
70     (r‘/manager‘,ManagerHandler),
71 ],**settings)
72
73 if __name__=="__main__":
74     application.listen(8880)
75     tornado.ioloop.IOLoop.instance().start()

session

时间: 2024-08-05 19:33:12

python tornado 自定义session的相关文章

Tornado自定义Session知识前戏

在类中调用方法前先实例化 广度优先 self['k']=v 会触发类 __setitem__方法 原文地址:https://www.cnblogs.com/jintian/p/11444008.html

第二百六十九节,Tornado框架-Session登录判断

Tornado框架-Session登录判断 Session需要结合cookie来实现 Session的理解 1.用户登录系统时,服务器端获取系统当前时间,进行nd5加密,得到加密后的密串 2.将密串作为一个字典的键,值为一个字典,也就是嵌套字典,键为密串的字典里保存用户信息 3.将这个密串当做cookie值写入浏览器 4.当用户访问时,判断值为密串的cookie是否存在,如果存在,获取cookie的值也就是密串,将这个密串在服务端的字典里查找是否存在,如果存在就可以拿到用户保存的各种信息,判断用

用 memcached 实现 Tornado 的 session 支持(一)

tornado 里面没有 session?不,当然有~我知道 github 上肯定有人帮我写好了~ O(∩_∩)O~ 于是乎,找到下面这个项目,用 memcached 实现 tornado 的 session.光会用可不行啊,让我们看看是怎么写的~ 项目地址:tornado-memcached-sessions 让我们先从 demo 看起.... app.py 中: 首先可以注意到,这里定义了一个新的 Application 类,继承于 tornado.web.Application, 在该类的

Asp.net Mvc 自定义Session (一)

大家都知道用系统默认的session 会存在这样的问题 如果用户过多的话 session 会自动消亡,而且不能支持分布式和集群. 这系列博客主要讲解  怎样 解决用户过多的session自动消亡,和分布式集群 使用例子 Session["test"] = "啄木鸟"; 完全不改变系统的使用风格,可以直接升级系统:     在这里我们主要用的 HttpRuntime.cache 和 memcache. 希望读者这跟着我的思路,一步一步来设计自定义Session 首先,

使用 IntraWeb (40) - 自定义 Session 数据

修改 UserSessionUnit 单元: unit UserSessionUnit; interface uses IWUserSessionBase, SysUtils, Classes, IWApplication; type TIWUserSession = class(TIWUserSessionBase) procedure IWUserSessionBaseCreate(Sender: TObject); procedure IWUserSessionBaseDestroy(Se

Python Tornado

按照http://www.tornadoweb.cn/所提供的方法下载安装后编写如下程序: import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") class TestHandler(tornado.web.RequestHandler): def get(self): self.wr

[Python]linux自定义Python脚本命令

在window下写好的程序配置到Linux上,要实现任意目录下的命令调用. 由于初学Linux,这里从文件传输等最基本的方法入手,记录配置的过程中遇到的各种问题. 连接远端服务器 这里使用putty这个工具,用SSH方法连上远端服务器 传输文件 使用FTP传输,这里用filezilla作为本地服务器,图形化界面,方便快捷 安装文件里引用的python包 wget url 命令联网下载安装包 wget http:/www.^&*&%%& 解压缩(具体可见blog:http://www

what's the python之自定义模块和包

模块自定义 上节说了有关模块的知识,当时所说的模块都是内置模块,现在来看自己定制的模块,即模块也可以自定义. 模块的自定义就是指写一段python文件,一般情况下里面包含了可执行的语句和函数的定义,其实自定义的模块和内置模块的效果一样,都是使以后程序的操作更加方便,不用重复敲一样的代码,直接导入模块就可以使用.导入方式与内置模块相同,import+文件名,当然,自定义的模块增加了许多其他的导入方式,下文我们会详细介绍. 需要特别注意的是:我们自定义的模块名不应该与系统内置模块重名. 现在我们来自

监听器应用【统计网站人数、自定义session扫描器、踢人小案例】

从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器.这篇博文主要讲解的是监听器的应用. 统计网站在线人数 分析 我们在网站中一般使用Session来标识某用户是否登陆了,如果登陆了,就在Session域中保存相对应的属性.如果没有登陆,那么Session的属性就应该为空. 现在,我们想要统计的是网站的在线人数.我们应该这样做:我们监听是否有新的Session创建了,如果新创建了Sesssion,那么在线人数就应该+1.这个在线人数是整个站点的,所以应该有Context对象保存.