@



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. JavaScript中的Array对象方法调用

    方法concat for  循环与for in 循环 <html> <head> <script type="text/javascript"> ...

  2. MySQl Study学习之--MySQl二进制日志管理

    MySQl Study学习之--MySQl二进制日志管理 MySQL二进制日志(Binary Log)   a.它包括的内容及作用例如以下:     包括了全部更新了数据或者已经潜在更新了数据(比方没 ...

  3. 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记3 Xcode、Auto Layout及MVC

    继续上一话中的计算器Demo.上一话讲到类必须被初始化.类中的属性也必须被初始化,所以你不能仅仅声明而不给它一个处置,那么问题来了,我们从storyboard中拖拽的@IBOutlet为什么仅仅有声明 ...

  4. angularjs 遍历

    <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...

  5. 图论之堆优化的Prim

    本题模板,最小生成树,洛谷P3366 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边 ...

  6. spring boot 的常用注解使用 总结

    附:Spring Boot 官方文档学习(一)入门及使用见https://www.cnblogs.com/larryzeal/p/5799195.html @RestController和@Reque ...

  7. fullpage中大的图片超过一屏怎么在手机端滑动显示?

    fullpage中大的图片超过一屏怎么在手机端滑动显示?(设置overflow电脑端是会出现滚动条的,但是在手机端不出现滚动条,图片也不可左右滑动显示) var $window = $(window) ...

  8. 滑动切换Activity代码

    最近需要对练习项目中的代码进行优化,发现很多代码写起来远比想象的困难很多.刚接触Android时间不长,很多东西都不能融会贯通,所以才会有这样的问题存在,当然学习中遇到的问题很有必要做个总结.想想这个 ...

  9. 范型在java中的应用

    根据泛型在java中的不同位置,大致可以分为类泛型.方法泛型和接口泛型.以下三个Demo基本展现三种泛型的用法,其中接口泛型又分两种情况描述.类泛型和方法泛型 import java.util.Arr ...

  10. MySql语句中select可以嵌套么,字段的重命名可以用中文么

    今天文档中看到的查询语句,SELECT后面又跟了一个SELECT嵌套,而且把字段重命名为中文,请问可以这样做么 MySql语句中select可以嵌套么,字段的重命名可以用中文么 >> my ...