zoukankan      html  css  js  c++  java
  • 08.cookie

    1.1 cookie简介

    • 1.cookie实质就是客户端硬盘中存放的键值对,利用这个特性可以用来做用户验证
    • 2.比如:{“username”: “dachengzi”} #再次访问url就会携带这些信息过来

    1.2 前端操作cookie

    • 说明: 使用下面方法操cookie必须先引入jquery.cookie.js
    • 前端获取cookie值: var v = $.cookie('per_page_count');
    • 前端设置cookie值: $.cookie('per_page_count',v);

    1.3 后端操作cookie

    • 说明: response = HttpResponse(...) 或 response = render(request, ...)
    • 后端设置cookie值: response.set_cookie('username',"zhangsan")
    • 后端后去cookie值: request.COOKIES.get('username')

    1.4 设置cookie时常用参数

    def cookie(request):
        #1 获取cookie中username111得值
        request.COOKIES.get('username111')
    
        #2 设置cookie的值,关闭浏览器失效
        response.set_cookie('key',"value")
        # 设置cookie, N秒只后失效
        response.set_cookie('username111',"value",max_age=10)
    
        #3 设置cookie, 截止时间失效(expires后面指定那个时间点失效)
        import datetime
        current_date = datetime.datetime.utcnow()
        exp_date = current_date + datetime.timedelta(seconds=5)         #seconds指定再过多少秒过期
        response.set_cookie('username111',"value",expires=exp_date)
    
        #4 设置cookie是可以使用关键字salt对cookie加密(加密解密的salt中值必须相同)
        obj = HttpResponse('s')
    
        obj.set_signed_cookie('username',"kangbazi",salt="asdfasdf")
        request.get_signed_cookie('username',salt="asdfasdf")
    
        #5 设置cookie生效路径
        path = '/'
    
        #6 删除cookie中is_login的值
        response.delete_cookie('is_login')
        return response

    02.使用cookie实现用户登录、注销

    2.1 views.py

    from django.shortcuts import render,HttpResponse,redirect
    
    def index(request):
        username = request.COOKIES.get('username')        # 获取cookie
        if not username:
            return redirect('/login/')
        return HttpResponse(username)
    
    def login(request):
        if request.method == "GET":
            return render(request,'login.html')
        if request.method == "POST":
            u = request.POST.get('username')
            p = request.POST.get('pwd')
            if u == 'tom' and p == '123':
                res = redirect('/index/')
                res.set_cookie('username',u,max_age=500)        # 设置500s免登陆
                return res
            else:
                return render(request,'login.html')
    
    def logout(req):
        response = redirect('/login/')
        #清理cookie里保存username
        response.delete_cookie('username')
        return response

    2.2 login.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="/login/" method="POST">
            <input type="text" name="username" placeholder="用户名">
            <input type="text" name="pwd" placeholder="密码">
            <input type="submit" value="提交">
        </form>
    </body>
    </html>

    03.CSRF原理

    1、当用户第一次发送get请求时,服务端不仅给客户端返回get内容,而且中间包含一个随机字符串
    2、这个字符串是加密的,只有服务端自己可以反解
    3、当客户端发送POST请求提交数据时,服务端会验证客户端是否携带这个随机字符串, 没有就会引发csrf错误
    4、如果没有csrf,那么黑客可以通过任意表单向我们的后台提交数据,不安全

  • 相关阅读:
    PAT 甲级 1132 Cut Integer (20 分)
    AcWing 7.混合背包问题
    AcWing 9. 分组背包问题
    AcWing 5. 多重背包问题 II
    AcWing 3. 完全背包问题
    AcWing 4. 多重背包问题
    AcWing 2. 01背包问题
    AcWing 875. 快速幂
    AcWing 874. 筛法求欧拉函数
    AcWing 873. 欧拉函数
  • 原文地址:https://www.cnblogs.com/xiaoxiamiaichiyu/p/14788832.html
Copyright © 2011-2022 走看看