session之cookie封装

本文介绍了一个使用Python Tornado框架实现的会话管理模块。该模块通过在服务器端存储会话信息,并利用MD5生成的随机字符串作为标识符存储在客户端Cookie中,实现了用户状态的跟踪与验证。此外,还提供了详细的代码示例说明如何设置和获取会话值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import tornado.ioloop
import tornado.web
container = {}

class Session:

    def __init__(self,handler):
        self.handler = handler
    # 生成随机字符串
    def __random_star(self):
        import hashlib
        import time
        obj = hashlib.md5()
        obj.update(bytes(str(time.time()),encoding='utf-8'))
        random_str = obj.hexdigest()
        return random_str
    # 在用户浏览器上设置cookie
    def set_value(self,key,value):
        random_str = self.__random_star()
        container[random_str] = {}
        container[random_str][key] = value
        self.handler.set_cookie('__kakaka__',random_str)
    # 获取用户浏览器上的cookie
    def get_value(self,key):
        random_str = self.handler.get_cookie('__kakaka__')
        user_info_dict = container[random_str]
        val = user_info_dict[key]
        return val


class IndexHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        # 获取用户传入的值 如果等于将执行操作
        if self.get_argument('u',None)in ['alex','eric']:
            s = Session(self)
            s.set_value('is_login',True)
        else:
            self.write('请登录')
class  ManagerHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        # 获取用户随机字符串 判断是否是true
        s = Session(self)
        val = s.get_value('is_login')
        if val:
            self.write('CG')
        else:
            self.render('/index')



settings = {
    'template_path':'views',
    'static_path':'statics',
    'cookie_secret':'skjfsajdklfjalskj'
}

application = tornado.web.Application([
    (r"/index",IndexHandler),
    (r"/manager",ManagerHandler),
],**settings)

if __name__ == '__main__':
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
############比较完整的封装

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import tornado.ioloop
import tornado.web
container = {}

class Session:

    def __init__(self,handler):
        self.handler = handler
        self.random_str = None
    # 生成随机字符串
    def __random_star(self):
        import hashlib
        import time
        obj = hashlib.md5()
        obj.update(bytes(str(time.time()),encoding='utf-8'))
        random_str = obj.hexdigest()
        return random_str

    # 在用户浏览器上设置cookie
    def set_value(self,key,value):
        if not self.random_str:
            # 获取用户上的cookie
            random_str = self.handler.get_cookie('__kakaka__')
            # 如果用户没有 cookie 那么就创建一份
            if not random_str:
                random_str = self.__random_star()
                container[random_str] = {}
            # 如果有
            else:
                # 如果 random_str 在 container.keys()里面 就pass
                if random_str in container.keys():
                    pass
                # 否则 就重新创建一份
                else:
                    random_str = self.__random_star()
                    container[random_str] = {}
            self.random_str = random_str
        container[self.random_str][key] = value
        self.handler.set_cookie('__kakaka__',self.random_str)

    # 获取用户浏览器上的cookie
    def get_value(self,key):

        random_str = self.handler.get_cookie('__kakaka__')
        #判断random_str是否为空
        if not random_str:
            return None
        # 到container里面获取下random_str 看是否存在
        user_info_dict = container.get(random_str,None)
        if not user_info_dict:
            return None
        val = user_info_dict.get(key)
        return val


class IndexHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        # 获取用户传入的值 如果等于将执行操作
        if self.get_argument('u',None)in ['alex','eric']:
            s = Session(self)
            s.set_value('is_login',True)

            s.set_value('name',self.get_argument('u',None))
            print(container)

        else:
            self.write('请登录')


class  ManagerHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        # 获取用户随机字符串 判断是否是true
        s = Session(self)
        val = s.get_value('is_login')
        if val:
            self.write(s.get_value('name'))
        else:
            self.write('失败')



settings = {
    'template_path':'views',
    'static_path':'statics',
    'cookie_secret':'skjfsajdklfjalskj'
}

application = tornado.web.Application([
    (r"/index",IndexHandler),
    (r"/manager",ManagerHandler),
],**settings)

if __name__ == '__main__':
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

  

  

session 保存在服务器端 的数据库 或者 内存 和缓存中


cookie保存在客户端,每次客户端访问都会携带cookie  

  

转载于:https://www.cnblogs.com/cloniu/p/6374688.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值