【Django】Cookie
时间:2019-08-06
本文章向大家介绍【Django】Cookie,主要包括【Django】Cookie使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
@
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页面")
原文地址:https://www.cnblogs.com/gqy02/p/11307179.html
- DateTime在ExtJs中无法正确序列化的问题
- ELK实时日志分析平台环境部署--完整记录
- 梳理Linux下OSI七层网络与TCP/IP五层网络架构
- 字符编码-使用c#研究
- iframe高度自适应的IE解决方案
- javascript读写本机文本文件
- 崔立鹏:腾讯云为知识竞技游戏提供解决方案
- Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
- 常用的AJAX弹出层代码
- Linux下检测IP地址冲突及解决方法
- linux如何挂载windows下的共享文件
- silverlight2中的定时器,以及如何动态改变控件的坐标
- 定时备份windows机器上的文件到linux服务器上的操作梳理(rsync)
- jQuery1.3以上版本"@"的问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在美帝的服务器的prefetch和aspera下载比较
- 全面介绍eBPF-概念
- 在ubuntu20上面安装R4
- 冷饭新炒:理解Snowflake算法的实现原理
- Python基础之算数运算符
- 一文带你领略并发编程的内功心法
- HBase监控
- CVPR19-Deep Stacked Hierarchical Multi-patch Network for Image Deblurring
- HTTP缓存机制与Cookie
- 52. Vue使用watch监听网页的URL变化
- 如何设计一个秒杀系统
- SQL注入之dns回显注入
- 只要一行代码,实现五种 CSS 经典布局
- Flutter-引入第三方依赖包
- Hive操作——删除表(drop、truncate)