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中存储的数据

session会话管理的更多相关文章

  1. .net用SQL Server进行session会话管理

    保存在内存中的session经常由于dll的变动导致丢失.有一种方法可以长期保存session,那就是session的SqlServer模式. ASP.NET允许将会话数据存储到一个数据库服务器中,方 ...

  2. 第二章 Session会话管理

    采用网址重写的缺点: 在有些Web浏览器中,URL限制为2000个字符. 仅当有链接要插入值时,值才能转换成后面的资源.此外,要把值添加到静态页面的链接中,可不是一件容易的事情. 网址重写必须在服务器 ...

  3. JavaWeb中Session会话管理,理解Http无状态处理机制

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512955067434271246/ 1.<Servlet简单实现开发部署过程> 2.<Serv ...

  4. session会话管理,与过滤器使用,访问控制

    1 用户登录,是否注册用户,在登录处理页面进行用户验证,创建session保存用户名和密码 2否,进入用户注册页面 3是,系统保存该用户的登录信息 4进入要访问的页面 5用户直接访问某个页面, 6系统 ...

  5. 4.会话管理(Session)

    1.会话管理的概念和基本原理: 会话管理概念: 会话的实现过程: 2.使用Cookie.隐藏域.URL重写实现会话管理 创建并向客户端发送Cookie; 从客户端读取Cookies Cookie的方法 ...

  6. 分布式Tomcat session会话Sticky Sessions问题

    分布式session会话Sticky Sessions - tomcat_baby的专栏 - CSDN博客https://blog.csdn.net/tomcat_baby/article/detai ...

  7. JavaWeb中Cookie会话管理,理解Http无状态处理机制

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512995108961387015/ 1.<Servlet简单实现开发部署过程> 2.<Serv ...

  8. java的会话管理:Cookie和Session

    java的会话管理:Cookie和Session 1.什么是会话 此处的是指客户端(浏览器)和服务端之间的数据传输.例如用户登录,购物车等 会话管理就是管理浏览器客户端和服务端之间会话过程产生的会话数 ...

  9. PHP会话管理:cookie和session

    PHP会话管理1.cookie数据存储在浏览器端方便与JavaScript交换数据方便获取用户信息风险-浏览器可能会禁用cookie替代方案-URL参数 2.session数据存储在服务器高效.安全. ...

随机推荐

  1. 【nginx】4xx,5xx 保持自定义header

    问题 nginx使用中,如果请求返回的状态code类似404或者50x这种,仍然返回自定义的header. 分析和解决 nginx文档中关于 add_header的部分 有这么一句 Adds the ...

  2. 关于IOS中使用支付功能(以支付宝为例)

    支付宝是第三方支付平台,简单来说就是协调客户,商户,银行三者关系的方便平台 使用支付宝进行一个完整的支付功能,大致有以下步骤: a 与支付宝进行签约,获得商户ID(partner)和账号ID(sell ...

  3. 和菜鸟一起学linux之linux性能分析工具oprofile移植

    一.内核编译选项 make menuconfig General setup---> [*] Profiling support <*> OProfile system profil ...

  4. ubunut在系统恢复模式下无法修改root密码的分析和解决

    前些日子本猫的ubuntu 14.10貌似出了点问题,想修改下root密码,但是无奈原系统有错正常情况下无法修改啊,这是逼我重装的节奏吗? 在ubuntu开机后立即按住left_shift不放,调出g ...

  5. 闫燕飞:Kafka的高性能揭秘及优化

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 大家下午好,我是来自腾讯云基础架构部ckafka团队的高级工程师闫燕飞.今天在这里首先为大家先分享 ...

  6. java——内部类

    内部类:将一个类定义在另一个类的里面,对里面那个类就称为内部类.内部类的访问特点: 1,内部类可以直接访问外部类的成员. 2,外部类要访问内部类,必须建立在内部类的对象.什么时候用? 一般用于类的设计 ...

  7. oracle角色、权限和用户

    oracle角色.权限和用户 [转贴 2010-1-25 10:29:45]     字号:大 中 小 Oracle内置角色connect与resource的权限 首先用一个命令赋予user用户con ...

  8. SpringMVC:数据绑定入门(-)

    1.数据类型,可以绑定基本数据类型,如int age,或者包装类型如:Integer age; 两者的区别:int 类型时,必填该参数,Integer 可以为空. 2.绑定数组 , 3.绑定对象. 3 ...

  9. ns3构建2 core fat tree出错

    我用ns3构建fat tree以下是我的拓扑结构: 在我用ns3构建完这个拓扑结构,并且加上此行代码: 但是运行的时候报错了.报的错误是: 解决办法是:进入到/src/internet/model/g ...

  10. GitHub学习笔记:本地操作

    安装过程略,假设你已经注册好了Github, 已经有了一个准备好的程序.我们的一切工作都是基于Git Shell,与GUI客户端无关. 在使用前你先要配置好config中的几个内容,主要是你自己的个人 ...