@



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:后台控制过期时间

设置 Cookie

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, HttpResponse
from 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_required
def home(request):
return HttpResponse("我是home页面") @login_required
def home01(request):
return HttpResponse("我是home01页面")

【Django】Cookie的更多相关文章

  1. 【Django】 初步学习

    这个系列(或者成不了一个系列..)预计会全程参考Vamei様的Django系列,膜一发.说句题外话,其实更加崇拜像Vamei那样的能够玩转生活.各个领域都能取得不小成就的人. [Django] ■ 概 ...

  2. 【Django】ORM操作#2

    目录 必知必会的13条查询方法 单表查询之神奇的双下划线 一对多 ForeignKey 多对多 ManyToManyField 在Python脚本中调用Django环境 Django终端打印SQL语句 ...

  3. 【Django】ORM操作#1

    目录 一.介绍 概念 由来 优势 劣势 总结 二.Django中的ORM Django项目使用MySQL Model 快速入门 1. AutoField 2. IntegerField 3. Char ...

  4. Python学习笔记整理总结【Django】:模板语言、分页、Cookie、Session

    一.模板语言  1.在前段展示:对象/字典/元组 class Business(models.Model): # id #用默认的自增id列 即:Business中有3列数据(id, caption, ...

  5. 【Django】 rest-framework和RestfulAPI的设计

    [rest-framework] 这是一个基于django才能发挥作用的组件,专门用于构造API的. 说到API,之前在其他项目中我也做过一些小API,不过那些都是玩票性质,结构十分简单而且要求的设计 ...

  6. 【Django】 视图层说明

    [Django视图层] 视图层的主要工作是衔接HTTP请求,Python程序和HTML模板,使他们能够有机互相合作从模型层lou到数据并且反馈.说到视图层的工作就有以下几个方面要说 ■ URL映射 对 ...

  7. 【Django】【二】模板

    1. Django-bootstrap3 guest>python -m pip install django-bootstrap3 [代码] settings.py ""& ...

  8. 【Django】--Form组件

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 例子: 1.创建Form类 from djan ...

  9. 【Django】--Model字段

    参考地址:http://www.cnblogs.com/wupeiqi/articles/6216618.html 所有字段 AutoField(Field) --int自增列,必须填入参数prima ...

随机推荐

  1. [MST] Loading Data from the Server using lifecycle hook

    Let's stop hardcoding our initial state and fetch it from the server instead. In this lesson you wil ...

  2. LightOJ Trailing Zeroes (III) 1138【二分搜索+阶乘分解】

    1138 - Trailing Zeroes (III) PDF (English) problem=1138" style="color:rgb(79,107,114)" ...

  3. poj_2352树状数组

    因为y已经排好序了,用x坐标建立一维树状数组 #include<iostream> #include<cstdio> #include<cstring> using ...

  4. webi和universe

    Universe是一个包含以下内容的文件: 1 一个或多个数据库中间件的连接参数. 2 称为对象的SQL结构,映射到数据库中的实际SQL结构,如列,表和数据库函数.其中对象是按类分组的.用户既可以看到 ...

  5. 无滚动条GridView少量图片展示

    import android.content.Context; import android.util.AttributeSet; import android.util.Log; import an ...

  6. css hover图片hover效果兼容ie8

    例子: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  7. 因子问题 I - Ugly Numbers

    题目: Ugly numbers are numbers whose only prime factors are 2, 3 or 5 . The sequence 1, 2, 3, 4, 5, 6, ...

  8. laravel 自定义全局函数

    在 app 目录下创建一个 Helpers 目录,在此目录下创建文件.这些文件就是全局函数文件.如叫:function.php 加载此文件: 1 . 在 bootstrap/autoload.php ...

  9. DedeCMS筛选简单实现方法不改后台源文件

    笔者在前面几篇文章中提到的dedecms筛选的实现方法,对新手来说实现过程较复杂.接下来分享一个最简单的实现在移动端上筛选功能. 最近在筹备移动端企业站,实现功能有:实现一个管理后台管理PC端和移动端 ...

  10. 洛谷3933 Chtholly Nota Seniorious 二分答案+贪心

    题目链接 题意 给你一个N*M的矩阵 (N,M <=2000)  把他分成两部分 使两部分的极差较大的一个最小  求这个最小值.然后分矩阵的要求是:每个部分内部的方块之间,可以通过上下左右相互到 ...