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()

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()

原文地址:https://www.cnblogs.com/ssyfj/p/8527145.html

时间: 2024-10-10 13:56:40

python全栈系列之---cookie模拟登陆和模拟session原理的相关文章

python全栈系列之---xss跨站脚本攻击和csrf(xsrf)攻击

xss跨站脚本攻击:恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的. 例如:某些论坛允许用户自由发言,而不对用户的输入数据进行检测,直接显示在页面中. 若是用户输入了某些css样式代码,html表格代码,显示在页面后会改变页面的布局. 若是输入某些js代码,用于获取其他用户的文件,或者修改本地文件,也可以发送用户cookie等信息到自己的计算机中模拟用户登录 一般可以通过函数处理htmlspecial

python全栈系列之---自定义分页类

# coding:utf8 # __author: Administrator # date: 2018/3/7 0007 # /usr/bin/env python import tornado.web from math import ceil LIST_INFO =[ {'username':'ld',"email":'[email protected]'}, ] class Pagination: #传入当前页,总条数 def __init__(self,current_pag

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

首先:注意cookie中的get_cookie是返回字符串,而get_secure_cookie返回的是字节类型 #self.get_secure_cookie() #The decoded cookie value is returned as a byte string (unlike #`get_cookie`). md5加密获取的十六进制也是返回的字符串类型 import hashlib import time obj = hashlib.md5() obj.update(bytes(s

Python全栈之路系列之赋值与运算符

Python全栈之路系列之赋值与运算符 在继续下面的文章之前我们先来浏览一下Python为我们提供的几种运算符,定义两个变量,分别是a和b,a的值是10,b的值是20. 算术运算符 运算符 描述 实例 + 加,两个对象相加 a+b=30 - 减,两个对象相减,可能会得到负数 a-b=-10 * 乘,两数相称或是返回一个被重复若干次的字符串 a*b=200 / 除,两个对象相除 b/a=2 % 取膜,返回除法的余数 b%a=0 ** 幂,返回x的y次幂 a**b=10000000000000000

python 全栈开发,Day30(第一次面向对象考试)

月考题: python 全栈11期月考题 一 基础知识:(70分) 1.文件操作有哪些模式?请简述各模式的作用(2分) 2.详细说明tuple.list.dict的用法,以及它们的特点(3分) 3.解释生成器(generator)与函数的不同,并实现且使用简单generator(3分) 4.如何理解lambda函数/表达式(2分) 5.a=10 b=20 def test(a,b): print(a,b) c = test(b,a) print(c) 上述代码中,打印出来的值a,b,c分别是什么

Python全栈开发【第一篇】:初识Python

Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与while循环练习题 基本数据类型前引 Python 的种类 Cpython Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上. Jyhton Python的Java实现,Jython会将Pyth

Python全栈考试-部分试题(精选)

Python全栈考试(一) Python全栈考试(一) 1.执行 Python 脚本的两种方式 答:1.>>python ../pyhton.py 2. >>python.py   #必须在首行有 #!/usr/bin/env python3 指定执行语言 2.简述位.字节的关系 答:一个字节(byte)=8位(bit)  位为最小的单位 3.简述 ascii.unicode.utf-8.gbk 的关系 ascii:只能表示256个符号 unicode:万国码,各国都有 需要有2位

python全栈开发devops运维自动化方向初到高级在线课程分享

适用人群 面向想要devops方向发展的全栈python运维开发工程师 课程概述 课程范围:我们的课程由浅入深包含C01到C05五个等级:包含前后端知识,覆盖培养一个合格python全栈工程师所需要的所有技能:还有Ca系列附加课对开发规范和git使用方式提供帮助说明,并对一些新的知识点持续更新: 包含项目:一共4个项目(用户系统cmdbansible任务管理系统项目发布系统),并包含源码. 视频课程地址和详情介绍:http://study.163.com/course/introduction.

python全栈和python自动化课程的区别在哪?

老男孩算是国内组早的做python培训的机构了,下面小编对于python自动化课程及全栈课程做了一个总结,希望能帮到你们: python全栈开发: 适合人群:应届本科生,专科,及零基础学员学习基础:0基础上课形式:脱产5个月,周一至周五上课课程内容:linux基础知识,python基础知识,网络编程,数据库应用,web开发,算法设计模式项目实战:博客系统开发,CRM系统开发,CMDB开发,主机开发管理,爬虫开发,金融量化交易项目开发未来发展方向:python全栈开发工程师就业方向:python爬