session会话和cookie一起被称为会话跟踪技术,主要通过保存在服务器端的session数据和客户端浏览器的cookie数据共同完成用户访问服务器的足迹记录。

1. 什么是会话

会话session通常情况下,当客户端浏览器打开之后第一次访问服务器时,服务器会记录该浏览器客户端的信息,保存在服务器的session空间中,会话建立!

如果用户在打开的浏览器没有完全关闭(关闭所有的选项卡)的情况下,会保持会话,在访问服务器的过程中,会一直使用当前会话。如果完全关闭浏览器时客户端的session失效也就是会话失效了。

会话通常用于保存一些用户在访问服务器过程中频繁访问的数据或者记录访问过程中的一些状态数据的作用,诸如记录用户登录状态等等

2. tornado中的会话

tornado中默认不支持会话操作,通常情况下可以通过cookie或者secure cookie进行会话管理。

但是某些情况下我们不能否认,session操作能很方便的处理数据并且预防一些类似cookie伪造发起的攻击等等,所以我们在tornado中还是非常期望出现session会话管理的。

Congratulaions!tornado中,我们通过第三方模块来完成会话操作,tornado中主要通过我们之前学过的缓存数据库redis结合pycket模块来完成

3. 会话操作

首先在电脑上安装需要的模块,这里要安装主要的模块pycket,该模块封装了session的主要操作,模块中封装的保存数据的引擎对象,我们选择缓存数据库redis,so,在你的电脑上,也要安装好redis缓存数据库哦

PS:redis缓存数据库部分请参考《数据库》部分文档

# 安装pycket模块
> pip install pycket

安装好pycket模块之后,就可以通过该模块中的SessionMixin类进行session的管理操作了。

主要分两个操作步骤

  1. 通过self.session.set(name, value)设置值,通过self.session.get(name)获取值
  2. 在Application中添加pycket配置,完成数据存储引擎的配置

上干货:

# -*- coding:utf-8 -*-

from tornado.web import Application, RequestHandler
from tornado.ioloop import IOLoop
from pycket.session import SessionMixin

class IndexHandler(RequestHandler, SessionMixin):
    def get(self):
        self.session.set("login", self.get_argument("name"))
        self.write("index get ok!")

class DetailHandler(RequestHandler, SessionMixin):
    def get(self):
        name = self.session.get("login")
        self.write("detail get ok! %s" % name)

if __name__ == "__main__":
    import base64, uuid

    cookie_secret = base64.b64encode(uuid.uuid4().bytes)

    app = Application(
        [(r"/", IndexHandler),
         (r"/detail", DetailHandler)],
        cookie_secret=cookie_secret,
        pycket={
            "engine": "redis",
            "storage": {
                "host": "localhost",# 设置redis主机
                "port": 6379,# 设置链接端口
                "max_connections": 2**64# 设置最大连接数
            },
            "cookies": {
                "expires_days": 2 # 设置过期时间
            }
        }
    )
    app.listen(8888)
    IOLoop.current().start()

4. 运行测试

打开浏览器,访问http://localhost:8888,会自动调用IndexHandler的get()方法,给session中存储数据

再次在浏览器地址栏中输入:http://localhost:8888/detail访问DetailHandler处理类获取session中存储的数据

最新文章

  1. ios -网络加载json和本地加载json
  2. 自然语言23_Text Classification with NLTK
  3. rutime中动态调用类的方法
  4. EXCEL数据透视图操作方式
  5. 函数(C++ Primer读书笔记)
  6. ACM2096
  7. hdu 4585 Shaolin(STL map)
  8. 只有电信3G是公网ip。
  9. img转data
  10. Java线段树
  11. Mybatis的应用2 使用mybits+SpringBoot完成第一个查询的demo(随后加增加,更新,删除)
  12. Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念(转)
  13. django引入模板时,部分css文件渲染不成功失灵引入不成功
  14. 美团面试-canvas实现放射图
  15. glide使用
  16. PAT 1031 查验身份证
  17. 学习笔记特别篇之orm的跨表
  18. python 函数的参数的几种类型
  19. APUE8进程控制 fork vfork exec
  20. hive介绍、安装配置、表操作基础知识适合小白学习

热门文章

  1. LeetCode - 二叉树的最大深度
  2. className.class.getResourceAsStream与ClassLoader.getSystemResourceAsStream区别
  3. 通过jQuery源码学习javascript(三)
  4. 2MySQL Server 系统架构
  5. windows下mongodb安装详解
  6. 成功实现在VS2017下编译含<pthread.h>的代码:
  7. cbp2make使用
  8. XGBoost算法--学习笔记
  9. php递归实现无限级分类树
  10. Xapth 添加注释头