博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django基础之cookie
阅读量:5835 次
发布时间:2019-06-18

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

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, HttpResponsedef 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 innerdef 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_requireddef index(request):    return render(request, "index.html")@login_requireddef home(request):    return HttpResponse("这是home页面")@login_requireddef logout(request):    rep = redirect("/login/")    rep.delete_cookie("is_login")    return rep

  

 

 

转载于:https://www.cnblogs.com/yang-wei/p/9998050.html

你可能感兴趣的文章
libjpeg.a exists or that its path is correct
查看>>
实现可折叠的分组tableview
查看>>
android 资源管理之 Asset/raw 1
查看>>
使用硬盘,安装双系统,Win7+CentOS
查看>>
Javascript学习总结
查看>>
快速安装infobright
查看>>
如何设计一门语言(二)——什么是坑(b)
查看>>
【转】Mean shift 聚类分析
查看>>
JS 操作Excel格式
查看>>
隐藏专杀工具文件夹病毒专杀工具
查看>>
php 用正则替换中文字符一系列问题解决
查看>>
ActiveMQ应用笔记一:基本概念&安装
查看>>
Hibernate download
查看>>
防止 JavaScript 自动插入分号
查看>>
WPF MVVM实现TreeView
查看>>
C# 多态理解
查看>>
uboot启动阶段修改启动参数方法及分析
查看>>
2012人人网校园招聘笔试题
查看>>
backbone csdn
查看>>
计算机术语白皮书
查看>>