python_way ,自定义session


container = {}     #可以是数据库,可以是缓存也可以是文件

class Session:
def __init__(self, handler): #handler就是之前传递过来的handler方法,所以它也会有setcookie方法。
#self.r_str 当前用户的cookie
self.handler = handler
self.r_str = handler.get_cookie("__session_id__") #获取客户端的cookie
if self.r_str: #如果获取到cookie
if self.r_str in container: #检查这个cookie是否存在在container中
#如果客户端访问的md5在我的列表中证明是真的
print("有cookie")
self.r_str = self.r_str
print(self.r_str)#设置一个字段,以备以后调用
else:#否则就是假的
self.cookie = client_publish.md5_str() # 先生成一个变化的cookie
handler.set_cookie("__session_id__",self.cookie) #设置一个新的cookie
print("假的cookie")
container[self.cookie] = {} #把这个cookie放在字典中
self.r_str = self.cookie #同样因为是新生成的cookie,还是设置一个字段,以备后患
else:
print("没有cookie")
self.cookie = client_publish.md5_str()
self.r_str = self.cookie
container[self.r_str] = {} # 如果没有设置cookie,第一次访问
handler.set_cookie("__session_id__", self.r_str, expires=time.time() + 20) # 设置cookie并且设置超时时间,每次用户访问都设置一下 def set_session(self, key, value):
print(container)
container[self.r_str][key] = value #设置session 这样可以保存很多key和value
print(container) def get_session(self):
user_session = self.handler.get_cookie("__session_id__", None)
if user_session in container:
try:
if container[user_session]["is_login"]:
return True
except Exception as e:
print(e,"not value")
return False class MyRequestHandler(tornado.web.RequestHandler):
def initialize(self):
#在RequestHandler中有set_cookie方法
self.key = Session(self) #我们把self传递给Session 自定义的这个类中 class HomeHadler(MyRequestHandler):
def get(self):
#self.set_cookie() 因为这里继承了MyRequestHandler,所以在这里也有set cookie方法
session = Session(self)
user_login = session.get_session()
if user_login:
self.redirect("/index") #跳转到这个用户已经登陆
else:
self.render("login.html") #如果这个用户没有登陆,则进入登陆页面 def post(self):
user = self.get_argument("user")
pwd = self.get_argument("pass")
print(user, pwd)
if user == "hanxu" and pwd =="": #从数据库中查找出来的用户名密码
session = Session(self)
session.set_session("is_login", True)
session.set_session("user", user)
self.redirect("/index") class HostHadler2(MyRequestHandler): #这种方式的话就可以方便统一使用,统一修改了
def get(self):
session = Session(self)
user_session = session.get_session()
if user_session:
self.write("主页")
else:                 #如果没有登陆,就调回登陆页面
self.redirect("/home")
#!/usr/bin/env python3
# Created by han on 2016/10/23
import os, sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from controller import home
import tornado.ioloop
import tornado.web
import publish
import modules #配置模板路径
settings = {
"template_path":"template", #自定义页面放置位置
"static_path": "static", #自定义静态文件放置位置,定义好以后在html页面中写上link标签引入静态文件才能生效
"ui_methods": publish,
"ui_modules": modules,
} application = tornado.web.Application([
(r"/main", home.MainHadler),
], **settings) #只需要在application这里增加setttings这个配置 application.add_handlers("cmdb.old.com",[
(r"/home", home.HomeHadler),
]) application.add_handlers("cmdb.old.com",[
(r"/main", home.CmdbHander),
]) application.add_handlers("cmdb.old.com",[
(r"/index", home.HostHadler2),
]) if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()

python_way ,自定义session的更多相关文章

  1. 可灵活扩展的自定义Session状态存储驱动

    Session是互联网应用中非常重要的玩意儿,对于超过单台部署的站点集群,都会存在会话共享的需求.在web.config中,微软提供了sessionstate节点来定义不同的Session状态存储方式 ...

  2. Asp.net Mvc 自定义Session (二)

    在 Asp.net Mvc 自定义Session (一)中我们把数据缓存工具类写好了,今天在我们在这篇把 剩下的自定义Session写完 首先还请大家跟着我的思路一步步的来实现,既然我们要自定义Ses ...

  3. Asp.net Mvc 自定义Session (一),

    大家都知道用系统默认的session 会存在这样的问题 如果用户过多的话 session 会自动消亡,而且不能支持分布式和集群. 这系列博客主要讲解  怎样 解决用户过多的session自动消亡,和分 ...

  4. 自定义session扫描器

    为何要自定义session扫描器 由于服务器来管理session的销毁不怎么靠谱,因此很多网站都会自己定义一个session扫描器来管理session的创建和销毁. 实现思路 首先,创建一个sessi ...

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

    从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器.这篇博文主要讲解的是监听器的应用. 统计网站在线人数 分析 我们在网站中一般使用Session来标识某用户是否登陆了,如果登陆了, ...

  6. Tronado自定义Session

    这里就不一一诉说Session和Cookie直接的关系了,下面以一张图来概括: 下面是一个简单的Tornaod自定义Session的例子,看完后你可能会明白为什么我们在Django里可以直接使用req ...

  7. 简单的自定义Session

    有关Session.Cookie机制建议参考文章:CookieSession机制详解,写的很详细,不再赘述 本篇文章通过一个简单的案例揭秘Session机制以及和Cookie的区别和联系: 服务器端代 ...

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

    Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session import tornado.ioloop import tornado.web from myhas ...

  9. Python web框架 Tornado(三)自定义session组件

    我们在学习Django框架的过程中,内部封装了session组件,以方便于我们使用进行验证.但是Tornado框架是没有session的,所以如果想使用session的话,就需要我们自己定制相对应的组 ...

随机推荐

  1. 第一轮复习Servlet day04

    * 数据的传送接收:后台通过request发送:req.setAttribute("emps", list); req.getRequestDispatcher("emp ...

  2. 161025、java提高篇之关键字static

    一. static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概念,在Java中static表示"全局"或 ...

  3. Understanding the RelationshipType Enumeration [AX 2012]

    Understanding the RelationshipType Enumeration [AX 2012] 3 out of 3 rated this helpful - Rate this t ...

  4. Install MongoDB on Red Hat Enterprise, CentOS, Fedora, or Amazon Linux

    Install MongoDB on Red Hat Enterprise, CentOS, Fedora, or Amazon Linux¶ Overview Use this tutorial t ...

  5. js里的匿名函数 数组排序

    // 匿名函数:其实就是函数的简写形式 var method =function(){ alert("123"); } method(); // 匿名函数可以用于事件的处理 fun ...

  6. 将turnserver设定成开机启动

    1.创建一个文件,在目录/etc/init/下面 #sudo vim /etc/init/turnserver.conf 2.添加如下内容 description "turn server& ...

  7. 【转】西门子数控系统中MMC、PCU、NCU、CCU简略介绍

    转载地址:http://cyj221.blog.163.com/blog/static/34194117201093005526170/ 2010-10-30 01:06:09|  分类: 机械制造 ...

  8. Linux 文件操作总结

    http://blog.163.com/he_junwei/blog/static/19793764620152592737741/ ioctl?? lseek?? 文件是linux中的一个重要概念. ...

  9. Oracle之ORA-00972: identifier is too long

    一.前言 今天在程序的日志中出现这个错误,网上搜了一下发现,说是Oracle的对象名字最多是30个字符,不能超过30,而我出错的sql是: "select * from test where ...

  10. 基于@AspectJ和schema的aop(二)---@AspectJ基础语法

    @AspectJ使用jdk5.0和正规的AspectJ切点表达式描述切面, 由于spring只支持方法的连接点,所以Spring只支持部分AspectJ的切点语言. 1.切点表达式函数 AspectJ ...