python_way ,自定义session
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的更多相关文章
- 可灵活扩展的自定义Session状态存储驱动
Session是互联网应用中非常重要的玩意儿,对于超过单台部署的站点集群,都会存在会话共享的需求.在web.config中,微软提供了sessionstate节点来定义不同的Session状态存储方式 ...
- Asp.net Mvc 自定义Session (二)
在 Asp.net Mvc 自定义Session (一)中我们把数据缓存工具类写好了,今天在我们在这篇把 剩下的自定义Session写完 首先还请大家跟着我的思路一步步的来实现,既然我们要自定义Ses ...
- Asp.net Mvc 自定义Session (一),
大家都知道用系统默认的session 会存在这样的问题 如果用户过多的话 session 会自动消亡,而且不能支持分布式和集群. 这系列博客主要讲解 怎样 解决用户过多的session自动消亡,和分 ...
- 自定义session扫描器
为何要自定义session扫描器 由于服务器来管理session的销毁不怎么靠谱,因此很多网站都会自己定义一个session扫描器来管理session的创建和销毁. 实现思路 首先,创建一个sessi ...
- 监听器应用【统计网站人数、自定义session扫描器、踢人小案例】
从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器.这篇博文主要讲解的是监听器的应用. 统计网站在线人数 分析 我们在网站中一般使用Session来标识某用户是否登陆了,如果登陆了, ...
- Tronado自定义Session
这里就不一一诉说Session和Cookie直接的关系了,下面以一张图来概括: 下面是一个简单的Tornaod自定义Session的例子,看完后你可能会明白为什么我们在Django里可以直接使用req ...
- 简单的自定义Session
有关Session.Cookie机制建议参考文章:CookieSession机制详解,写的很详细,不再赘述 本篇文章通过一个简单的案例揭秘Session机制以及和Cookie的区别和联系: 服务器端代 ...
- Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架
Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session import tornado.ioloop import tornado.web from myhas ...
- Python web框架 Tornado(三)自定义session组件
我们在学习Django框架的过程中,内部封装了session组件,以方便于我们使用进行验证.但是Tornado框架是没有session的,所以如果想使用session的话,就需要我们自己定制相对应的组 ...
随机推荐
- mysql笔记02 创建高性能的索引
创建高性能的索引 1. 索引(在MySQL中也叫做"键(key)")是存储引擎用于快速找到记录的一种数据结构. 2. 索引可以包含一个或多个列的值.如果索引包含多个列,那么列的顺序 ...
- db.properties
jdbc.driverclass=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc:oracle:thin:@192.168.201.192:1521:orcl ...
- 免安装版Tomcat6.0启动方法
免安装版Tomcat6.0启动方法 1.下载Tomcat Zip压缩包,解压. 2.修改startup.bat文件: 在第一行前面加入如下两行 SET JAVA_HOME=JDK目录 SET CATA ...
- java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。
//------------------------------------------------我是代码的分割线 // 首选是一个工具类,在该工具类里面,定义了一个方法,public void s ...
- bash正则表达式
星号*: 匹配它前面的字符串或正则表达式任意次(包括0次). 比如:* 可能匹配的字符串有:... ...... 句号.: 匹配除换行符之外的任意一个字符. 比如:"112.",将 ...
- 未知的系统错误(The transaction is no longer active - status: 'Committed'. No further JDBC access is allowed within this transaction.)
被调用接口处理并发能力太脆弱导致的问题. 重新请求下即可.
- 操作SQLite的dbhelper
操作SQLite的dbhelper public class DbHelper { string connStr = @"Data Source=" + System.Enviro ...
- 2016年10月20日 星期四 --出埃及记 Exodus 19:4
2016年10月20日 星期四 --出埃及记 Exodus 19:4 `You yourselves have seen what I did to Egypt, and how I carried ...
- android 入门 004 (同一个方法,点击实现不同的效果)
同一个方法,点击实现不同的效果 <Button android:id="@+id/btn3" android:layout_width="wrap_content& ...
- log4net使用(winform)
有时候 会出现错误 :如 log4net 错误 2 未能找到类型或命名空间名称“log4net”(是否缺少 using 指令或程序集引用?) 解决 方法 :http://q.cnblogs.com/q ...