1. Cookie

1.1 Cookie的由来

大家都知道HTTP协议是无状态的。无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系, 它不会受前面的请求响应情况直接影响, 也不会直接影响后面的请求响应情况。

一句话来概括, 对于服务器来说, 每次的请求都是全新的。

状态可以理解为客户端和服务器在每次会话中产生的数据, 那无状态的就以为这些数据不会被保留. 会话中产生的数据又是我们需要保存的, 也就是说要"保持状态". 因此Cookie就是在这样一个场景下诞生。

1.2 什么是Cookie

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

1.3 Cookie的原理

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

1.4 查看Cookie

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

2. Django中操作Cookie

2.1 获取cookie

request.COOKIES["key"]
request.get_signed_cookie("key", default=RAISE_ERROR, salt="", max_age=None)

get_signed_cookie方法的参数:

  • default默认值
  • salt: 加密盐
  • max_age: 后台控制过期时间

2.2 设置Cookie

rep = HttpResponse(...)
rep = render(request, ...) rep.set_cookie(key, value, ...)
rep.set_signed_cookie(key, value, salt="加密盐", ...)

参数:

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

2.3 删除cookie

def logout(request):
rep = redirect("/login/")
rep.delete_cookie

3. Cookie版登录校验

from django.shortcuts import render, redirect, HttpResponse

def login_required(func):
def inner(request, *args, **kwargs):
return_url = request.path_info
print(return_url)
if request.COOKIES.get("is_login") == "True":
print("cookies true")
ret = func(request, *args, **kwargs)
return ret
else:
return redirect("/login/?ReturnUrl={}".format(return_url)) return inner def login(request):
err_msg = ""
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
print(username, password)
if username == "yang" and password == "123":
return_url = request.GET.get("ReturnUrl", "")
if return_url:
ret = redirect(return_url)
else:
ret = redirect("/index/")
ret.set_cookie("is_login", "True", max_age=604800)
return ret
else:
err_msg = "用户名或者密码错误"
return render(request, "login.html", {"err_msg": err_msg}) @login_required
def index(request):
return render(request, "index.html") @login_required
def home(request):
return HttpResponse("这是home页面") @login_required
def logout(request):
rep = redirect("/login/")
rep.delete_cookie("is_login")
return rep

  

 

Django基础之cookie的更多相关文章

  1. django基础 -- 8.cookie 和 session

    一. cookie 1.cookie 的原理 工作原理是:浏览器访问服务端,带着一个空的cookie,然后由服务器产生内容, 浏览器收到相应后保存在本地:当浏览器再次访问时,浏览器会自动带上Cooki ...

  2. Django基础之cookie与session

    cookie与session 由来及简介 HTTP协议四大特性 1.基于请求响应 2.基于TCP.IP作用于应用层之上 3.无连接 4.无状态 基于HTTP协议的通信无法记录客户端状态 但是现在很多软 ...

  3. django 基础进 COOKIE

    1 cookie session auth cookie概念:针对每一个服务器,保存在客户端浏览器的一个key-value结构数据,可以理解成一个字典结构 cookie语法:              ...

  4. 老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分

    老师的blog整理 python基础部分: 宝哥blog: https://www.cnblogs.com/guobaoyuan/ 开哥blog: https://home.cnblogs.com/u ...

  5. 老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分

    老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分   老师的blog整理 python基础部分: 宝哥blog: https://www.cnblogs.com/gu ...

  6. {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

    Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...

  7. Django基础cookie和session

    Django基础cookie和session 1.会话跟踪 ​ 什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如给10086打个电话,你就是客户端, ...

  8. day 62.3 Django基础八之cookie和session

    Django基础八之cookie和session   本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx ...

  9. day 66 Django基础之jQuery操作cookie

    Django基础之jQuery操作cookie   jquery之cookie操作 定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术: 下载与引入:jquery. ...

随机推荐

  1. 玩linux笔记——持续更新

    说在最前面 centos 是基于redhat linux,所以最好的教程在红帽官网 https://access.redhat.com/documentation/en-us/red_hat_ente ...

  2. MyBatis 源码篇-整体架构

    MyBatis 的整体架构分为三层, 分别是基础支持层.核心处理层和接口层,如下图所示. 基础支持层 反射模块 该模块对 Java 原生的反射进行了良好的封装,提供了更加简洁易用的 API ,方便上层 ...

  3. 【原创】大叔经验分享(78)hive查询报错NoViableAltException

    Hive或spark中执行sql字符常量包含;时会报错,比如 select instr('abc;abc', ';'); 报错 NoViableAltException(-1@[147:1: sele ...

  4. [NOIP10.3模拟赛]3.w题解--神奇树形DP

    题目链接: 咕 闲扯: 这题考场上把子任务都敲满了,5个namespace,400行11k 结果爆0了哈哈,因为写了个假快读只能读入一位数,所以手测数据都过了,交上去全TLE了 把边分成三类:0. 需 ...

  5. Windows 查看端口使用、根据pid查找引用程序

    1.查看特定端口的使用情况:以80端口为例,输入命令 netstat -aon|findstr "80" 2.根据PID号找到对应的程序:以PID是6776为例,输入命令taskl ...

  6. # 机器学习算法总结-第一天(KNN、决策树)

    KNN算法总结 KNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别.(监督) k近邻算法(knn)是一种基本的分类与回归的算法,k-mea ...

  7. ASP.NET IHttpModule IHttpHandler IHttpHandlerFactory 拦截请求

    先来看看代码,拦截所有Http请求类.下面包含了两种类的集成 IHttpModule IHttpHandlerFactory using System; using System.Collection ...

  8. OS 常见函数使用

    os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. os.getcwd:得 ...

  9. oracle内核参数详解

    一.前言 在生产中,我们安装oracle数据库时,为达到最优我们需要对操作系统的内核参数进行一定的调整.主要从内存.cpu.io以及网络等方面,根据实际情况进行调整.以下参数可供大家参考,如有不当之处 ...

  10. 怎么解决Win7电脑更新出现80072EE2代码的错误?

    我们在使用Win7系统时经常会遇到更新,这些更新可以修复一些系统漏洞,提高系统的安全性.但有时我们在进行相关更新时会出现错误,而导致最后的更新失败.下面好系统重装助手就和大家分享一下Win7系统更新出 ...