Django Cookie 与 Session 对比

news2025/7/22 0:58:49

文章目录

        • 原理比较
        • 语法比较
        • Cookie 示例
          • 创建 Cookie
          • 更新 Cookie
          • 删除 Cookie
        • Session 示例
          • 创建 session
          • 查询 session
          • 删除一组键值对
          • 删除 session
        • 参考文档

    本文通过示例演示 Django 中如何创建、查询、删除 Cookie 与 Session。

原理比较

    在Web开发中,使用 session 来完成会话跟踪,session 底层依赖 Cookie 技术。出于安全原因,需要对关键信息(比如密码)进行加密,cookie 很难满足这个需求,所以出现了 session。简单画了一个图:

在这里插入图片描述

语法比较

SessionCookie
request.session['session_name'] = 'session_value' response.set_cookie(cookie_name, value, max_age = None, expires = None)
删除一组键值对: request.session.pop('session_name') 或 del request.session['session_name'] response.delete_cookie(cookie_name)
删除整条记录: request.session.flush() 或 request.session.clear()
session_value = request.session.get('session_name')request.COOKIES['cookie_Name']
session_value = request.session['session_name']

    注意:在Cookie 操作中,“查询”操作,需要服务器端首先从 request 请求头中提取出 Cookie,所以前缀是 request。

Cookie 示例

    一个简单的示例,不存储数据,无需修改 models.py。
    views.py

from django.shortcuts import HttpResponse

def SetCookie(request):
    response = HttpResponse('Create the Cookie')
    response.set_cookie('bookname','fan_ren_xiu_xian_zhuan')
    return response

def GetCookie(request):
    bookname = request.COOKIES['bookname']
    return HttpResponse(f'The book name is: {bookname}')

def UpdateCookie(request):
    response = HttpResponse('Update the Cookie!')
    response.set_cookie('bookname','wan_gu_shen_di')
    return response

def DeleteCookie(request):
    response = HttpResponse('Delete the Cookie!')
    response.delete_cookie('bookname')
    return response

    urls.py

from django.contrib import admin
from django.urls import path
from .views import SetCookie, GetCookie, UpdateCookie, DeleteCookie

urlpatterns = [
    path('admin/', admin.site.urls),
    path('setcookie/',SetCookie),
    path('getcookie/',GetCookie),
    path('updatecookie/',UpdateCookie),
    path('deletecookie/',DeleteCookie),
]

    使用浏览器验证,我使用的是火狐。

创建 Cookie

    浏览器端发送请求,服务器端返回 Set-Cookie 响应头到浏览器端,用于创建Cookie:

在这里插入图片描述

    同时,查询浏览器,已经存储了相应 Cookie:

在这里插入图片描述

    后续的访问,浏览器的请求头中都携带了Cookie:

在这里插入图片描述

更新 Cookie

    更新Cookie时,服务器端将新 Cookie 通过响应头发送到浏览器端:

在这里插入图片描述

    查询浏览器存储的 Cookie,已经变成新 Cookie 了:

在这里插入图片描述

删除 Cookie

    删除 Cookie,就是将 Cookie 设置为空,同时将过期时间设置为1970年1月1日 00:00:00。

在这里插入图片描述

Session 示例

    本示例中使用了数据库。提前创建好数据库,session数据会存储到 django_session 表中。
    views.py

from django.shortcuts import HttpResponse
 
def SetSession(request):
    request.session['book_name1'] = 'fan_ren_xiu_xian_zhuan'
    request.session['book_name2'] = 'wan_gu_shen_di'
    return HttpResponse('The Session has been successfully set')
 
def GetSession(request):
    book_name1 = request.session.get('book_name1')
    book_name2 = request.session.get('book_name2')
    return HttpResponse(f'The book_name1 is: {book_name1}, the book_name2 is: {book_name2}')

def DelSessionKey(request):
    # 方法1: del request.session['book_name1']
    # 方法2: request.session.pop('book_name1')
    request.session.pop('book_name1')
    return HttpResponse('The Session key book_name1 has been delete')

def DelSession(request):
    request.session.flush()
    return HttpResponse('The Session has been delete')

def Set_expiry(request):
    request.session.set_expiry(300)
    return HttpResponse('The Session last 5 minutes.')

    urls.py

from django.contrib import admin
from django.urls import path
from .views import SetSession, GetSession, DelSessionKey, DelSession, Set_expiry

urlpatterns = [
    path('admin/', admin.site.urls),
    path('setsession/',SetSession),
    path('getsession/',GetSession),
    path('delsessionkey/',DelSessionKey),
    path('delsession/',DelSession),
    path('setexpiry/',Set_expiry),
]
创建 session

    使用火狐浏览器验证。发送请求,响应头中返回 sessionid。

在这里插入图片描述

    同时 sessionid 已经存储在浏览器中:

在这里插入图片描述

    此时数据库中已经有了对应的 session 记录,过期时间默认14天,所以是12月9日:

在这里插入图片描述

查询 session

    方法1:通过网页查询 session,可以正常获取到解码之后的值。

在这里插入图片描述

    方法2:django shell 中进行查询操作。使用 python3 manage.py shell 命令进入命令行,根据 sessionid 创建实例化对象,使用 get_decoded() 方法进行解码,得到 session 值。最后,可以使用 delete() 方法删除整个 session。

在这里插入图片描述

删除一组键值对

    访问 delsessionkey/ 路径,删除一组键值对:

在这里插入图片描述

    从数据库中可以观察到,因为删除一组键值对,数据有了修改,所以 session_data 和 expire_date 都改变了。session_data 存的是用户的信息,即多个 request.session[“key”]=value,且是密文。expire_date 存的是该条记录的过期时间(默认14天)。

在这里插入图片描述

    再次查询数据,book_name1 已经取不到了。

在这里插入图片描述

删除 session

    访问路径 delsession/,删除整个 session:

在这里插入图片描述

参考文档

[1] 菜鸟教程.Django cookie 与 session[EB/OL].[2022-11-25].https://www.runoob.com/django/django-cookie-session.html.
[2] AskPython.Django Cookies – Setting up User Cookies in Django[EB/OL].[2022-11-25].https://www.askpython.com/django/django-cookies.
[3] AskPython.Django Sessions – Setting up User Sessions with Django[EB/OL].[2022-11-25].https://www.askpython.com/django/django-sessions.
[4] Django Software Foundation.如何使用会话[EB/OL].[2022-11-25].https://docs.djangoproject.com/zh-hans/4.1/topics/http/sessions/.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无线监控摄像头使用什么样的物联网卡?

无线监控摄像头使用什么样的物联网卡? 随着安全行业的发展和进步,无线监控摄像头的种类越来越多,但主要的网络形式大致可以分为两种形式,一种是连接WiFi使用远程监控,另一种是插入物联网卡的远程监控。随着物联网的快…

初阶数据结构学习记录——열 二叉树(3)链式

链式二叉树是由指针形成的二叉树,之前写的二叉树是由数组组成的,链式由链表来做。链式二叉树每个节点有两个指针,指向两边。以往二叉树,栈,队列等等都需要增删查改,但链式二叉树则不是这样,是因…

深入理解java虚拟机:虚拟机字节码执行引擎(1)

文章目录1. 概述2. 运行时栈帧结构2.1 局部变量表2.2 操作数栈2.3 动态连接2.4 方法返回地址2.5 附加信息1. 概述 代码编译的结果是从 本地机器码 转变为 字节码 ,是存储格式发展的一小步,却是编程语言发展的一大步。 执行引擎 是Java虚拟机最核心的组…

pmp是什么意思啊?

PMP是一个证书,项目管理类的专业认证考试,从国外引进大陆已经很多年了,反响也不错。 以前,大陆每年报考PMP的人很少,那时的思维观念,更多的认为有了这个PMP证书,代表着你很上进,学习…

Terraform 初始化慢~配置本地离线源

解决Terraform初始化慢~配置本地离线源 - 知乎 这里不再介绍Terraform是啥了,可以参考最近上线的课程。直奔主题,配置一个离线的源。需要手动或者terraform init一次下载, 然后缓存。后续直接使用缓存。 本次实践使用的是Linux/Mac 系统&am…

【App自动化测试】(十二)App异常弹框处理

目录1. app弹框异常处理——递归方式1.1 黑名单弹框异常处理逻辑1.2 实现代码1.3 方法缺点2. app弹框异常处理——装饰器版本2.1 装饰器的优势2.2 实现代码前言: 本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家,希望有志同道合的小伙伴…

计算机毕业设计之java+ssm交通信息网上查询系统

项目介绍 随着交通交通管理需求和在线交通管理渗透率的提升,中国交通管理在线市场将释放巨大潜力,交通管理系统的建设和发展成为业界广泛关注的重点,本文将对此进行分析,以期为我国交通管理电子商务的发展提供参考。交通管理业对…

石化能源行业工业互联网智能工厂解决方案

随着时代的发展,中国的工业企业逐渐进入了一个“新常态”:生产效率提升,非计划停运或检修造成的生产损失更为昂贵;高盈利的要求,需要更加关注能源使用效率;法律法规对于人员安全及环保合规要求更为严格&…

基于ffmpeg开发的多音频文件音量均衡程序

前言 audio_balance ✨ 基于ffmpeg开发的多音频文件音量均衡程序 ✨ 项目地址 GitHub:https://github.com/Ikaros-521/audio_balance gitee:https://gitee.com/ikaros-521/audio_balance 使用说明 Python:3.9 程序依赖 ffmpeg实现。请先安…

Centernet 生成高斯热图

写在前面的话 最近学校阳了,宿舍给封了,宿舍网络不好远程跑不了实验,随缘写一下对CenterNet源码的一个解读,之前写论文的那段时间留下来的工作,respect! 这个文章主要是对CenterNet中生成高斯核的部分代码…

皕杰报表之语义层

1 语义层定义 语义层——是处于数据源与报表之间的一个概念,是用户和数据库之间的一个代码翻译层,通俗的讲是将数据库中的比较凌乱、复杂的数据对象(例如:存储在table中的各个字段的记录)按预先定义好的规则&#xff…

权限管理框架Shiro renren-security权限管理结构

权限管理框架Shiro: 一直在做项目,由于是二次开发的项目,今天才发现自己连权限控制都没有搞懂。二次开发的是基于renren开源的一个项目。 链接:https://gitee.com/renrenio/renren-security 这个项目主要使用shiro权限管理框架来…

31、Java高级特性——Math类、Random类、String类、StringBuffer类、StringBuilder类

目录 一、Math类 1、Math类中的方法 1.1 圆周率:PI 1.2 绝对值:abs() 1.3 返回最小近似值:ceil() 1.4 返回最大近似值 1.5 四舍五入:round() 1.6 最大值和最小值:max()/min() 1.7 求指定次幂 :po…

Java面向对象16:接口的定义与实现

普通类:只有具体的实现 抽象类:具体的实现和规范(抽象方法)都有 接口:只有规范!自己无法写方法,专业的约束,约束和实现分离:面向接口编写(大佬把接口定义好…

vue3 响应式 API 之 ref

ref 是最常用的一个响应式 API,它可以用来定义所有类型的数据,包括 Node 节点和组件。 没错,在 Vue 2 常用的 this.$refs.xxx 来取代 document.querySelector(‘.xxx’) 获取 Node 节点的方式,也是使用这个 API 来取代。 类型声明…

[附源码]计算机毕业设计JAVA乒乓球俱乐部管理系统

[附源码]计算机毕业设计JAVA乒乓球俱乐部管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM my…

我为什么将机器学习主力语言从Python转到Rust

我为什么将机器学习主力语言从Python转到Rust 文章目录写在前面Python的痛点猴子补丁(Monkey Patch)缺乏参数类型校验允许跨作用域访问运行缓慢太多隐含规则Rust之剑猴子补丁参数类型作用域运行速度隐含规则结论写在前面 首先要声明一下:Python依然是我最喜欢的编程…

S5PV210的启动过程

一、内存 SRAM 静态内存 特点就是容量小、价格高,优点是不需要软件初始化直接上电就能用。DRAM 动态内存 特点就是容量大、价格低,缺点就是上电后不能直接使用,需要软件初始化后才可以使用。 单片机中:内存需求量小,而…

SpringBoot SpringBoot 开发实用篇 6 监控 6.7 自定义端点

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.7 自定义端点6.7.1 问题引入6.7.2 自定义端点6.7.3 小结6.7.…

20221125使用PR2023自动识别obs-studio录屏生成的MKV视频的字幕

20221125使用PR2023自动识别obs-studio录屏生成的MKV视频的字幕 2022/11/25 19:07 01 obs.png obs studio (64bit) 02 obs 设置.png 03 obs 输出.png 04 obs默认为MKV.png 05 obs改mkv为MP4.png 警告:如果文件无法完成(例如&…