django编写cookie

cookie

HTTP协议是一个无状态协议,即每一个请求都是独立的!无法记录前一次请求的状态,但HTTP会使用cookie值进行跟踪会话。在WEB开发当中,使用session来完成会话跟踪,session底层依赖于cookie技术。

其实cookies是由网络服务器存储在你电脑硬盘上的一个txt类型的小文件,它和你的网络浏览行为有关,所以存储在你电脑上的cookies就好像你的一张身份证,你电脑上的cookies和其他电脑上的cookies是不一样的;cookies不能被视作代码执行,也不能成为病毒,所以它对你基本无害。

在HTTP中,表示服务器对浏览器的“小甜点”。其实cookie是一个{key:value}结构,随着服务器的响应发送给客户端浏览器,然后客户端可以把cookie保存下来,当下一次访问同一服务器的时候把cookie再返回给客户端。cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。当客户端向服务器再次提交请求时,把这个cookie会一起发送过去,这样服务器就会识别到这个客户端,默认会填写一些信息,方便访问服务器。

image-20221106000457703

cookie应用

在django框架下我们简单的实现一下,代码原理如下:

我们目标是通过login视图,进行登录,然后获取到index页面。

def index(request):
        
    return render(request,"index.html")


def login(request):
    if request.method == "GET":
        return render(request,"login.html")

    else:
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        if user == "regina" and pwd == "127717":

            return redirect("/index")
        else:
            return render(request,"login.html")

但是现在问题存在于,我们直接去访问index页面也是可以获取到的,从而就绕过了login的验证

image-20221106105610796所以希望可以存在一个东西,在访问index页面时可以验证是否有登录,如果没有登录就访问,服务器就需要把他返回到login页面,如果有就展示index页面

def index(request):
    print(request.COOKIES.get("is_login"))
    is_login = request.COOKIES.get("is_login")
    if is_login == "true":
        return render(request,"index.html")
    else:

        return redirect("/login")


def login(request):
    if request.method == "GET":
        return render(request,"login.html")

    else:
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        if user == "regina" and pwd == "127717":
            #登陆成功时,再写cookie
            res = HttpResponse("登录成功")
            res.set_cookie("is_login","true")

            return res
        else:
            return render(request,"login.html")

image-20221106110455600

salt值

上述例子可以看出来,cookie值存放的很简单,这就使得有很大的风险被盗取cookie,因此我们引入一个摘要值salt

res.set_signed_cookie("is_login","true",salt="20000127")

服务器端接收的时候也需要改一下接收语句

is_login = request.get_signed_cookie("is_login",salt="20000127")

image-20221106174052845

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django编写cookie - Python技术站

(0)
上一篇 2023年4月2日 下午4:30
下一篇 2023年4月2日

相关文章

  • linux文件权限解读

    Linux 文件权限 文件权限和文件类型共有10个字符组成,这10个字符可以分成三部分 \[d+rwx+rwx+rw-\\d:表示文件类型\\2-4位(第一组rwx):表示文件所有者的对文件的权限\\5-7位(第二组rwx):表示文件所有者所在组的用户对文件的权限\\8-10位(rw-):表示其他用户对文件的权限 \] 其中 r 表示可读,w 表示可写,x …

    Linux 2023年4月18日
    00
  • Django_渲染详解

    Django_render 模板语法 模板引擎是一种可以让开发者把服务端数据填充到html网页中完成渲染效果的技术。它实现了把前端代码和服务端代码分离的作用,让项目中的业务逻辑代码和数据表现代码分离,让前端开发者和服务端开发者可以更好的完成协同开发。 静态网页:页面上的数据都是写死的,万年不变 动态网页:页面上的数据是从后端动态获取的(比如后端获取当前时间;…

    2023年4月2日
    00
  • linux下c语言的crypt函数怎么用?

    linux的crypt 最近学校布置了一个网安的小作业,要用到linux里面的这个crypt函数,写一篇总结一下。首先我们要了解这个函数是用来做什么的。 密码影子文件中存储了每一个用户的用户明文和其单向哈希过的秘文 cipher = “$1$C68vnJ27$1ttFZ1/Rylq/xi350A0NI0”; 密码字段用\(id\)salt$hashed的格式…

    Linux 2023年4月17日
    00
  • django中间件以及自定义中间件

    middleware 中间件就是在目标和结果之间进行的额外处理过程,在Django中就是request和response之间进行的处理,相对来说实现起来比较简单,但是要注意它是对全局有效的,可以在全局范围内改变输入和输出结果,因此需要谨慎使用,否则不仅会造成难以定位的错误,而且可能会影响整体性能。 中间件有什么用 如果想要修改HttpRequest或者Htt…

    2023年4月2日
    00
  • matplotlib画图基础知识

    matplotlib plt.plot()绘制线性图 绘制单条线形图 绘制多条线形图 设置坐标系的比例plt.figure(figsize=(a,b)) 设置图例legend() 设置轴的标识 图例保存 fig = plt.figure() plt.plot(x,y) figure.savefig() import matplotlib.pyplot as …

    2023年4月2日
    00
  • pandas替换,加载,透视表

    pandas的级联和合并 级联操作 pd.concat, pd.append pandas使用pd.concat函数,与np.concatenate函数类似,只是多了一些参数: objs axis=0 keys join=’outer’ / ‘inner’:表示的是级联的方式,outer会将所有的项进行级联(忽略匹配和不匹配),而inner只会将匹配的项级联…

    2023年4月2日
    00
  • django学习_路由

    django2 路由控制器 Route路由,是一种映射关系。路由是把客户端请求的url路径和用户请求的应用程序,这里意指django里面的视图进行绑定映射的一种关系。 请求路径和视图函数不是一一对应的关系 在django中所有的路由最终都被保存到一个叫urlpatterns的文件里,并且该文件必须在主应用下的urls.py里进行声明,这是由setting文件…

    2023年4月2日
    00
  • phpt文件内容解析

    phpt测试文件说明 phpt文件用于PHP的自动化测试,这是PHP用自己来测试自己的测试数据用例文件。 测试脚本通过执行PHP源码根目录下的run-tests.php,读取phpt文件执行测试。 phpt文件包含 TEST,FILE,EXPECT 等多个段落的文件。在各个段落中,TEST、FILE、EXPECT是基本的段落, 每个测试脚本都必须至少包括这三…

    PHP 2023年4月19日
    00
合作推广
合作推广
分享本页
返回顶部