博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Django】Cookie
阅读量:5154 次
发布时间:2019-06-13

本文共 2652 字,大约阅读时间需要 8 分钟。

目录

@

Cookie介绍


Cookie的由来

大家都知道==HTTP协议是无状态的==.

==无状态的的意思是每次请求都是独立的==,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况.

人生只如初见,对于服务器来说,每次的请求都是全新的.

==状态可以理解为客户端和服务器在某次会话中产生的数据.==

==无状态就可以理解为这些数据不会被保留==.
会话中产生的数据又是我们需要保存的,也就是说要"保持状态",因此Cookie就在这样一个场景下诞生了.
***

什么是Cookie

Cookie具体指的是一段小信息,==它是服务器发送出来存储在浏览器上的一组组键值对==。下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用的信息.

Cookie本身最大支持4096字节.
***

Cookie的原理

有服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能通过Cookie的内容来判断这个是"谁"了.

***

查看Cookie

我们使用Chrome浏览器,打开开发者工具:

在这里插入图片描述

操作Cookie


获取Cookie

def login(request):    # 获取Cookie:    ret = request.COOKIES['user']    # ret = request.COOKIES.get('user')    # request.get_signed_cookie(key, salt='user', default='')    # request.get_signed_cookie('user', default=RAISE_ERROR, salt='', ax_age=None)    return render(request, 'login.html')

get_signed_cookie方法的参数:

  • default:默认值
  • salt:加密盐
  • max_age:后台控制过期时间
    ***
def test(request):    rep = HttpResponse('is ok')    # 设置Cookie:    rep.set_cookie('user', 'zyk')    # rep.set_signed_cookie('user', 'zyk', salt="加盐")    return rep

查看设置的Cookie,如图:

在这里插入图片描述

set_cookie方法的参数:

  • key:键.
  • value='':值.
  • max_age=None:超时时间.
  • expires=None:指定IE浏览器超时时间(IE requires > expires, so set it if hasn't been already.).
  • path='/':Cookie生效的路径,/表示跟路径,特殊的:跟路径的cookie可以被任何url的页面访问.
  • domain=None:Cookie生效的域名
  • secure=False:https传输
  • httponly=False:只能http协议传输,无法被JavaScript获取(也不是绝对,底层抓包可以获取到也可以被覆盖).
    ***

删除Cookie

def test(request):    rep = HttpResponse('is ok')    # 删除Cookie:    rep.delete_cookie('user')    return rep

Cookie版登陆校验:

from django.shortcuts import render, redirect, HttpResponsefrom blog01 import models# 装饰器函数def login_required(fn):    """如果未登陆,将返回login页面"""    def inner(request, *args, **kwargs):        print(request.COOKIES.get('is_login'))        if request.COOKIES.get('is_login') != '1':            # 获取当前url路径            next = request.path_info            return redirect('/login/?next=%s' % next)        ret = fn(request, *args, **kwargs)        return ret    return inner# 登陆功能def login(request):    if request.method == 'POST':        user = request.POST.get('user')        pwd = request.POST.get('pwd')        if models.Userinfo.objects.get(name=user, pwd=pwd):            # 提取跳转之间访问的页面            next = request.GET.get('next')            rep = redirect(next) if next else redirect('/home/')            # 设置Cookie,  max_age=1:指定过期时间为1秒            rep.set_cookie('is_login', '1', max_age=1)            return rep    return render(request, 'login.html')@login_requireddef home(request):    return HttpResponse("我是home页面")@login_requireddef home01(request):    return HttpResponse("我是home01页面")

转载于:https://www.cnblogs.com/zyk01/p/10176316.html

你可能感兴趣的文章
rendering omni shadow in one pass.
查看>>
No repository found containing,eclipse 自动更新erro 解决
查看>>
iOS设计模式之单例模式
查看>>
MySQL面试题中:主从同步的原理
查看>>
HTTP和WebSocket协议(二)
查看>>
项目练习(二)—微博数据结构化
查看>>
Jquery插件的编写和使用
查看>>
跨域请求
查看>>
灌水导论——灌水法初步
查看>>
Vim 使用教程(搬运)
查看>>
常问面试题
查看>>
《构建之法》课程总结及建议
查看>>
echarts使用
查看>>
SQL2005触发器和存储过程
查看>>
poj 2186 Popular Cows 有向图强连通分量 tarjan
查看>>
hdu 2545 并查集
查看>>
[BZOJ4568][SCOI2016]幸运数字(倍增LCA,点分治+线性基)
查看>>
尤金·卡巴斯基:卡巴斯基实验室调查内网遭黑客攻击事件
查看>>
android之Handler Runnable实现倒计时
查看>>
putty修改编码
查看>>