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

tornado 里面没有 session?不,当然有~我知道 github 上肯定有人帮我写好了~ O(∩_∩)O~

于是乎,找到下面这个项目,用 memcached 实现 tornado 的 session。光会用可不行啊,让我们看看是怎么写的~

项目地址:tornado-memcached-sessions

让我们先从 demo 看起....

app.py 中:

首先可以注意到,这里定义了一个新的 Application 类,继承于 tornado.web.Application, 在该类的初始化方法中,设定了应用参数 settings, 之后初始化父类和 session_manager.(这是什么?暂时不管它...)

class Application(tornado.web.Application):
    def __init__(self):
        settings = dict(
            # 设定 cookie_secret, 用于 secure_cookie
            cookie_secret = "e446976943b4e8442f099fed1f3fea28462d5832f483a0ed9a3d5d3859f==78d",
            # 设定 session_secret 用于生成 session_id
            session_secret = "3cdcb1f00803b6e78ab50b466a40b9977db396840c28307f428b25e2277f1bcc",
            # memcached 地址
            memcached_address = ["127.0.0.1:11211"],
            # session 过期时间
            session_timeout = 60,
            template_path = os.path.join(os.path.dirname(__file__), "templates"),
            static_path = os.path.join(os.path.dirname(__file__), "static"),
            xsrf_cookies = True,
            login_url = "/login",
        )

        handlers = [
            (r"/", MainHandler),
            (r"/login", LoginHandler)
        ]

        # 初始化父类 tornado.web.Application
        tornado.web.Application.__init__(self, handlers, **settings)
        # 初始化该类的 session_manager
        self.session_manager = session.SessionManager(settings["session_secret"], settings["memcached_address"], settings["session_timeout"])

在下面的 LoginHandler 中我们可以看到 session 的使用:

class LoginHandler(BaseHandler):
    def get(self):
        self.render("login.html")

    def post(self):
        # 以字典的键值对形式存取
        self.session["user_name"] = self.get_argument("name")
        # 修改完要调用 session 的 save, 否则等于没有修改哦...
        self.session.save()
        self.redirect("/")

从使用来看是不是非常简洁和清晰?那么,细心的你是不是发现现在的 handler 没有继承于 tornado.web.RequestHandler?带着强烈的探(zuo)索(si)精神我们打开了 base.py。天啊,好短....(噢,你想到哪里去了...)

BaseHandler 的方法只是初始化,并重写了 get_current_user 的用于用户登录验证的方法。

class BaseHandler(tornado.web.RequestHandler):
    def __init__(self, *argc, **argkw):
        super(BaseHandler, self).__init__(*argc, **argkw)
        # 定义 handler 的 session, 注意,根据 HTTP 特点,每次访问都会初始化一个 Session 实例哦,这对于你后面的理解很重要
        self.session = session.Session(self.application.session_manager, self)

    # 这是干嘛的?用于验证登录...请 google 关于 tornado.web.authenticated, 其实就是 tornado 提供的用户验证
    def get_current_user(self):
        return self.session.get("user_name")

看到这里,是不是心满意足?噢,我终于理解了!。。。喂,说好的探(zuo)索(si)精神呢?关键在于 session.py 啊!你一脸茫然地回过了头....

欲知后事如何,请听下回分解。(这种文风真的好吗....)

时间: 03-11

用 memcached 实现 Tornado 的 session 支持(一)的相关文章

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

客官您终于回头了!让我们本着探(zuo)索(si)精神把 session.py 看完吧... 首先看看需要的库: pickle 一个用于序列化反序列化的库(听不懂?你直接看成和 json 一样作用就行了...) hmac 和 hashlib 用于生成加密字符串 uuid 用于生成一个唯一 id memcache  Python 的 memcache 客户端 这里面有三个类,SessionData Session 和 SessionManager.先看最简单的 SessionData. Sessi

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

童鞋,我就知道你是个好学滴好孩子-来吧,让我们进行最后的探(zuo)索(si)! 上一次我们讲到哪里?哦...准备讲 SessionManager 是吧,来-一个一个函数看- 首先是初始化,设置密钥, memcache 地址,session 超时时间. # 初始化需要一个用于 session 加密的 secret, memcache 地址, session 的过期时间 def __init__(self, secret, memcached_address, session_timeout):

Nginx+LAT(apache+tomcat)的实现和使用memcached保存tomcat的session会话

Nginx+LAT(Apache+tomcat)的实现和Apache反向代理和负载均衡tomcat的不同方式以及使用memcached保存tomcat的session会话 一.Nginx+LAT(Apache+tomcat)的环境结构; 1.Nginx +Apache实现负载均衡用户请求至tomcat,其中Nginx是负载均衡调度器,Apache和tomcat在同一台机器上,Apache将关于JSP的请求发送至tomcat. 2.实验结构图: 3.环境介绍,在两台CentOS7上都安装Tomca

Memcached + MSM 实现Tomcat Session保持

Memcached + MSM 实现Tomcat Session保持 tomcat memcached 大纲 前言 Memcached介绍 MSM介绍 实验拓扑 实验环境 实验步骤 安装配置Tomcat 安装配置Nginx负载均衡 安装配置Memcached + MSM 总结 前言 上篇文章我们实现了session sticky和session cluster实现用户session的保持, 这篇文章主要介绍使用Memcached + MSM来实现用户session的保持 Memcached介绍

Memcached做Tomcat的session共享

基于cache DB缓存的session共享 基于memcache/redis缓存的session共享.即使用cacheDB存取session信息,应用服务器接受新请求将session信息保存在cache DB中,当应用服务器发生故障时,调度器会遍历寻找可用节点,分发请求,当应用服务器发现session不在本机内存时,则去cacheDB中查找,如果找到则复制到本机,这样实现session共享和高可用. Tomcat集群session同步方式:1)使用tomcat自带的cluster方式,多个to

Web API 开启Session支持

Web API中默认是没有开启Session支持的,开启Session支持,需要进行以下操作,以下操作分两种,都是在Global.asax文件中添加代码的. 这时要在Global.asax里添加如下代码,开启Session功能(重写Init方法) /// <summary> /// 开启WebAPI中的Session支持 /// </summary> public override void Init() { this.PostAuthenticateRequest += (sen

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

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

nginx+memcached+tomcat集群 session共享完整版

nginx+memcached+tomcat集群 session共享完整版 集群环境 1.nginx版本 nginx-1.6.2.tar.gz 2.jdk 版本 jdk-7u21-linux-x64.tar.gz 3.tomcat 版本  7.0.29 4.memcached 版本 memcached-1.4.22.tar.gz 5. CentOS 6.5 系统采用一台服务做测试 一.nginx安装 安装依赖包 yum -y install gcc gcc-c++ 1.安装pcre库 tar z

【源代码剖析】tornado-memcached-sessions —— Tornado session 支持的实现(二)

客官您最终回头了! 让我们本着探(zuo)索(si)精神把 session.py 看完吧... 首先看看须要的库: pickle 一个用于序列化反序列化的库(听不懂?你直接看成和 json 一样作用即可了...) hmac 和 hashlib 用于生成加密字符串 uuid 用于生成一个唯一 id memcache  Python 的 memcache client 这里面有三个类.SessionData Session 和 SessionManager. 先看最简单的 SessionData.