[44]session会话管理

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周小董

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值