cookie、Django 中操作 cookie(简单)

cookie

cookie是保存在浏览器本地上的一组组键值对;

 

特性:

  • 由服务器生成返回给浏览器并进行保存
  • cookie 由浏览器保存在本地,但浏览器有权不保存
  • 浏览器再次访问时自动携带对应的cookie

 

mac 下谷歌浏览器清除 cookie

command + shift + delete

 

 

django 中操作 cookie(简单)

Django 中简单的操作cookie

from django.shortcuts import render, redirect, HttpResponse
from functools import wraps
# Create your views here.


def login(request):
    if request.method == 'POST':
        user = request.POST.get('username')
        pwd = request.POST.get('pwd')
        print(user, pwd)

        if user == 'aaa' and pwd == 'xxxx':
            res = redirect('/index/')
            res.set_cookie('islogin', '1')
            return res
        else:
            error = '用户名密码错误'
    return render(request, 'login.html', locals())


def login_required(func):
    @wraps(func)
    def inner(request, *args, **kwargs):
        print(request.COOKIES)
        is_login = request.COOKIES.get('islogin')
        print(is_login, type(is_login))
        if is_login != '1':
            # 没有登陆,跳转到登陆页面
            return redirect('/')
        ret = func(request, *args, **kwargs)
        return ret
    return inner


@login_required
def index(request):
    print(request.COOKIES)
    return render(request, 'index.html')

Django 中加密 cookie 的设置、获取

# 设置cookie
res.set_signed_cookie('key', 'value', salt='yan')

# 获取cookie
request.get_signed_cookie('key', salt='yan', default='默认值')

set_cookie(key, value)  # Set-Cookie: key=value 

备注:

default 为获取cookie失败的时候用到的默认值

res.set_signed_cookie('key', 'value', salt='yan') 参数设置:

  • key 键
  • value 值
  • max_age=None cookie超市时间
  • path cookie生效路径
  • domain cookie生效域名
  • secure=True https传输
  • httponly=True 只能通过http协议传输,无法被js获取(不是绝对,底层抓包可以获取到,也可以被覆盖)

 

清除cookie

def logout(request):
    # 清除cookie, (清除某个键值对)
    ret = redirect('/login/')
    ret.delete_cookie('islogin')
    return ret

备注:删除cookie 和 set cookie 其实是用了 响应头:Set-Cookie: 。设置cookie 的值为空,超时时间为0

 

posted @ 2021-08-13 21:21  Star-Hitian  阅读(293)  评论(0编辑  收藏  举报