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. 数据库订正脚本性能优化两则:去除不必要的查询和批量插入SQL

    最近在做多数据库合并的脚本, 要将多个分数据库的表数据合并到一个主数据库中. 以下是我在编写数据订正脚本时犯过的错误, 记录以为鉴. 不必要的查询 请看以下语句: regiondb = db.Houy ...

  2. javaWeb 使用cookie显示上次访问网站时间

    package de.bvb.cookie; import java.io.IOException; import java.io.PrintWriter; import java.util.Date ...

  3. linux配置java环境变量(详细)【转】

    转自:http://www.cnblogs.com/samcn/archive/2011/03/16/1986248.html 一. 解压安装jdk 在shell终端下进入jdk-6u14-linux ...

  4. 调整iFrame高度

    在Chrome中,即使将iframe的高度设置为100%,也无法根据内容页自动调节高度,需要在iframe的onload even中通过计算设置iframe的高度 function setIframe ...

  5. taglib指令

    taglib:用来引用标签库并设置标签库的前缀,(允许JSP页面使用用户自定义标签) 语法:<%@ taglib uri="tagLibraryURI" prefix=&qu ...

  6. 记得ajax中要带上AntiForgeryToken防止CSRF攻击

    经常看到在项目中ajax post数据到服务器不加防伪标记,造成CSRF攻击 在Asp.net Mvc里加入防伪标记很简单在表单中加入Html.AntiForgeryToken()即可. Html.A ...

  7. 【转】表删除时 Cannot delete or update a parent row: a foreign key constraint fails 异常处理

    转载地址:http://lijiejava.iteye.com/blog/790478 有两张表,结构如下: t_item:                          t_bid: id    ...

  8. 【转】Cookie和Session的区别详解

    转载地址:http://www.phperzone.cn/portal.php?aid=541&mod=view 一.cookie机制和session机制的区别 具体来说cookie机制采用的 ...

  9. Alignment

    Alignment Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14547 Accepted: 4718 Descriptio ...

  10. ZendStudio调试配置(XDebug)

    服务器配置:WAMP Sever 3.0.0 调试器环境:Zend Studio 12.0 Build ID: 12.0.0.v20141117-20141115-2331-278 License:  ...