zoukankan      html  css  js  c++  java
  • session之cookie封装

    #!/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  
    

      

  • 相关阅读:
    day15 web框架和Django基础
    activiti5.22 获得mybatis sessionFactory
    activiti 视图
    activiti 任意退
    spring cloud &&spring boot
    JPA 一对多关联
    webstorm 快捷键
    web storm 破解
    Excel通用导出
    activiti 小计
  • 原文地址:https://www.cnblogs.com/cloniu/p/6374688.html
Copyright © 2011-2022 走看看