python全栈系列之---cookie模拟登陆和模拟session原理

Posted 山上有风景

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python全栈系列之---cookie模拟登陆和模拟session原理相关的知识,希望对你有一定的参考价值。

cookie模拟登陆:

技术分享图片
import tornado.web

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        #self.write("Hello world")
        # 展示所有的cookie
        # print(self.cookies)
        # print(self.get_cookie(‘k1‘))
        # self.set_cookie(‘k1‘,‘999‘)#还有 过期时间 适用路径
        # self.render("index.html")
        if self.get_argument(‘u‘,None) in [‘asd‘,‘zxc‘]:
            self.set_secure_cookie(‘user‘,self.get_argument(‘u‘))
        else:
            self.write(‘请登录‘)

class ManagerHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        #默认self.get_secure_cookie(‘user‘,None)获取的数据是bytes类型
        if str(self.get_secure_cookie(‘user‘,None),encoding="utf8") in [‘asd‘,‘zxc‘]:
            self.write("欢迎登录:"+str(self.get_secure_cookie(‘user‘),encoding="utf8"))
        else:
            self.redirect(‘/index‘)

settings ={
    ‘template_path‘:‘views‘,
    ‘static_path‘:‘statics‘,
    ‘cookie_secret‘:‘dafawafawfaw‘,
}

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


if __name__=="__main__":
    application.listen(8080)
    tornado.ioloop.IOLoop.instance().start()
View Code

session原理模拟(放在内存),更多是放在Redis,文件,数据库中

技术分享图片
import tornado.web

#放在内存 redis  文件  数据库
container={}

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        if self.get_argument(‘u‘,None) in [‘asd‘,‘zxc‘]:
            import hashlib
            import time
            obj = hashlib.md5()
            obj.update(bytes(str(time.time()),encoding="utf8"))
            random_str = obj.hexdigest()
            #这一段随机字符串需要传入到客户端cookie中,以便用户到服务端对应
            container[random_str]={}
            container[random_str][‘k1‘]=123
            container[random_str][‘k2‘]=self.get_argument(‘u‘)+"parents"
            container[random_str][‘is_login‘]=True

            self.set_cookie(‘py_session‘,random_str)
        else:
            self.write("请登录")

class ManagerHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        random_str = self.get_cookie(‘py_session‘, None)
        if random_str:
            if container.get(random_str,None):
                if container[random_str][‘is_login‘]:  # 或者container.get(random_str,None)
                    self.write("欢迎登录" + container[random_str][‘k2‘])
                    return;
        self.redirect("/index")


settings ={
    ‘template_path‘:‘views‘,
    ‘static_path‘:‘statics‘,
    ‘cookie_secret‘:‘dafawafawfaw‘,
}

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


if __name__=="__main__":
    application.listen(8080)
    tornado.ioloop.IOLoop.instance().start()
View Code

 

以上是关于python全栈系列之---cookie模拟登陆和模拟session原理的主要内容,如果未能解决你的问题,请参考以下文章

2Python全栈之路系列之Tornado的Cookie与Sess

python全栈系列之---定义一个session类

20170717_python爬虫之requests+cookie模拟登陆

《python3网络爬虫开发实战》--模拟登陆

Python爬虫实例网站模拟登陆

python requests模拟登陆github