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,那么黑客可以通过任意表单向我们的后台提交数据,不安全

原文地址:https://www.cnblogs.com/xiaoxiamiaichiyu/p/14788832.html