【Django】Cookie和Session的使用

Cookies和Session

1. 会话

  • 从打开浏览器访问一个网站,到关闭浏览器结束此次访问,称之为一次会话。

  • HTTP协议是无状态的,导致会话状态难以保持。

  • Cookies和Session就是为了保持会话状态而诞生的两个存储技术。

2. Cookies

2.1 Cookies定义

  • Cookies是保存再客户端浏览器上的存储空间。

    • Chrome 浏览器可能通过开发者工具的 Application >> Storage >> Cookies 查看和操作浏览器端所有的Cookies值。

    • 火狐浏览器 通过开发者工具的 存储 >> Cookie 查看。

2.2 Cookies特点

  • Cookies 在浏览器上是以键值对的形式进行存储到,键和值都是以ASCII字符串的形式存储(不能是中文字符串)。

  • 存储的数据带有生命周期。

  • Cookies 中的数据是按照域存储隔离的,不同的域之间无法访问。

  • Cookie 的内部数据会在每次访问此网址时都会携带到服务器端,如果Cookies过大会降低响应速度。

2.3 Cookies的使用

# 设置/修改Cookie
HttpResponse.set_cookie(key,value='',max_age=None,expires=None)
## key:Cookie的名字
## value:Cookie的值
## max_age:Cookie存储时间,秒为单位
## expires:具体的过期时间
## 当不指定 max_age 和 expires 时,关闭浏览器此时数据失效# 删除/获取Cookie
HttpResponse.delete_cookie(key)
## 删除指定的key的Cookie,如果key不存在则什么也不发生# 获取Cookies
request.COOKIES.get('Cookie名','默认值')
## 通过request.COOKIES 绑定的字典(dict)获取客户端的COOKIES数据

代码示例

# 浏览器设置一个名为uname的cookie,值是euansu,过期时间为10分钟的cookie
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.def set_cookies(request):response = HttpResponse("set cookies")response.set_cookie("uname", "euansu", 600)return response

代码示例

# 浏览器设置一个键为 my_cookie,值为123,过期时间为1个小时的cookie
def set_cookies_new(request):response = HttpResponse("set cookies")response.set_cookie("my_cookie", "123", 3600)return response
# 浏览器修改 my_cookie的值为123,过期时间为2个小时
def update_cookies(request):response = HttpResponse("update cookies")response.set_cookie("my_cookie", "456", 7200)return response

浏览器设置 cookie

浏览器修改 cookie。

代码示例

# 浏览器删除Cookies
def delete_cookies(request):response = HttpResponse("delete cookies")response.delete_cookie("my_cookie")return response

代码示例

# 获取Cookies
def get_cookies(request):values = request.COOKIES.get("my_cookie", "my_cookie")return HttpResponse("my_cookie value is {my_cookie}".format(my_cookie=values))

3. session

3.1 session定义

session 是在服务器上开辟一段空间用于保留浏览器和服务器交互时的重要数据。

实现方式:

  • 使用 session 需要在浏览器客户端启动 cookie,且在cookie中存储sessionid。

  • 每个客户端都可以在服务器端有一个独立的session。

  • 注意:不同的请求者之间不会共享这个数据,与请求者一一对应。

3.2 session初始配置

settings.py 中配置 session

  1. 向 INSTALLED_APPS 列表中添加:

    INSTALLED_APPS = [...# 启用 sessions 应用'django.contrib.sessions',
    ]
  2. 向 MIDDLEWARE 列表中添加:

    MIDDLEWARE = [...# 启用 session 中间件'django.contrib.sessions.middleware.SessionMiddleware',
    ]

3.3 session的使用

session 对象是一个类似于字典的sessionstore类型的对象,可以用类拟于字典的方式进行操作。

session 能够存储如字符串、整型、字典、列表等。

  1. 保存 session 的值到服务器。

    request.session['key'] = value
  2. 获取 session 的值。

    value = request.session['key']
    vakue = request.session.get('key', 默认值)
  3. 删除 session。

    del request.session['key']

代码示例

# 设置session
def set_session(request):request.session['uname'] = 'euansu'return HttpResponse("set session is ok!")

代码示例

# 获取session
def get_session(request):value = request.session.get("uname", "")return HttpResponse("session unmae values is {value}".format(value=value))

代码示例

# 修改session
def update_session(request):request.session['uname'] = '南歌'return HttpResponse("update session is ok!")

代码示例

# 删除session
def delete_session(request):del request.session["uname"]return HttpResponse("delete session is ok!")

3.4 session相关配置项

  1. SESSION_COOKIE_AGE

    作用:指定 sessionid 在 cookies 中的保存时长(默认是两周),如下:

    SESSION_COOKIE_AGE = 60*60*24*7*2
  2. SESSION_EXPIRE_AT_BROWSER_CLOSE = True

    设置只要浏览器关闭时,session就失效(默认为False)

注意:Django 中的session数据存储在数据库中,所以使用session前需要确保已经执行migrate。

3.5 Django session的问题

  1. django_session 表是单表设计,且该表数据量持续增持(浏览器故意删掉sessionid&过期数据未删除)。

  2. 可以每晚执行 python3 manage.py clearsessions,该命令可以删除已过期的session数据。

3.6 Cookies 和 session 对比

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

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

相关文章

新产品!可视化试卷搭建平台

hi, 大家好, 我是徐小夕. 之前和大家分享了很多可视化低代码和零代码的技术实现和产品设计思路, 也和大家分享了 H5-Dooring 零代码搭建平台的技术实现和未来规划, 今天继续和大家分享一下我们的新产品——橙子试卷. 橙子试卷 是一款可视化试卷/问卷搭建平台, 我们可以通过拖拽…

HttpRunner自动化测试之实现参数化传递

参数化实现及重复执行 参数化测试:在接口测试中,为了实现不同组数据对同一个功能模块进行测试,需要准备多组测试数据对模块进行测试的过程。 在httprunner中可以通过如下方式实现参数化: 1、在YAML/JSON 中直接指定参数列表 2、…

【HarmonyOS应用开发】ArkUI 开发框架-进阶篇-应用弹窗(十一)

一、应用弹窗 1、概述 在我们日常使用应用的时候,可能会进行一些敏感的操作,比如删除联系人,这时候我们给应用添加弹窗来提示用户是否需要执行该操作,如下图所示: 弹窗是一种模态窗口,通常用来展示用户…

树状数组复习

基本原理 树状数组的原理简单来说就是利用二进制拆分区间 我们可以对一个数进行二进制分解,最多分解成log(x)个数,同样我们可以对[1,n]这个区间进行分解。也是最多log段,每次修改时我们维护受到影响的区间,然后查询时用这log个区…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--大模型、扩散模型、视觉

专属领域论文订阅 关注{晓理紫|小李子},每日更新论文,如感兴趣,请转发给有需要的同学,谢谢支持 如果你感觉对你有所帮助,请关注我,每日准时为你推送最新论文。 为了答谢各位网友的支持,从今日起…

论文阅读:Learning Lens Blur Fields

这篇文章是对镜头模糊场进行表征学习的研究,镜头的模糊场也就是镜头的 PSF 分布,镜头的 PSF 与物距,焦距,光学系统本身的像差都有关系,实际的 PSF 分布是非常复杂而且数量也很多,这篇文章提出用一个神经网络…

数仓建模维度建模理论知识

0. 思维导图 第 1 章 数据仓库概述 1.1 数据仓库概述 数据仓库是一个为数据分析而设计的企业级数据管理系统。数据仓库可集中、整合多个信息源的大量数据,借助数据仓库的分析能力,企业可从数据中获得宝贵的信息进而改进决策。同时,随着时间的…

Xlua分析:C#调用Lua

本篇主题是C#如何调用lua的补充。 xLua交互知识 参考官方文档《programming in lua》的第24章开头,里面很详细地阐述了Lua和C是如何实现交互的:栈操作。Lua API用一个抽象的栈在Lua与C之间交换值。栈中的每一条记录都可以保存任何 Lua 值。如果想要从L…

算法42:天际线问题(力扣218题)---线段树

218. 天际线问题 城市的 天际线 是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度,请返回 由这些建筑物形成的 天际线 。 每个建筑物的几何信息由数组 buildings 表示,其中三元组 buildings[i] [lefti, righti, heig…

【Spring连载】使用Spring Data访问Redis(九)----Redis流 Streams

【Spring连载】使用Spring Data访问Redis(九)----Redis流 Streams 一、追加Appending二、消费Consuming2.1 同步接收Synchronous reception2.2 通过消息监听器容器进行异步接收Asynchronous reception through Message Listener Containers2.2.1 命令式I…

【学网攻】 第(20)节 -- 网络端口地址转换NAPT配置

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

Elasticsearch重建索引-修改索引字段类型

如果不允许修改索引字段类型,只能重建索引 步骤 新建一个索引数据迁移删除旧索引别名引用 目录 1、准备工作1.1、查看版本号1.2、创建旧索引1.3、添加两条数据1.4、查看数据 2、新建一个索引2.1、查看旧索引的mapping2.2、新建索引 3、数据迁移3.1、使用异步任务迁…

C语言应用实例——贪吃蛇

(图片由AI生成) 0.贪吃蛇游戏背景 贪吃蛇游戏,最早可以追溯到1976年的“Blockade”游戏,是电子游戏历史上的一个经典。在这款游戏中,玩家操作一个不断增长的蛇,目标是吃掉出现在屏幕上的食物&#xff0c…

探究 MySQL 中使用 where 1=1 是否存在性能影响

文章目录 前言聊聊 mybatis 中多条件拼接的两种常规写法where 11使用 <where> 标签 性能影响where 11<where> 标签 总结个人简介 前言 最近在项目中使用 mybatis 写 SQL 使用了 where 11 来简化多条件拼接的写法&#xff0c;案例如下&#xff0c;借此聊聊多条件拼…

CTF(5)

一、[SWPUCTF 2021 新生赛]ez_caesar 1、题目 import base64 def caesar(plaintext):str_list list(plaintext)i 0while i < len(plaintext):if not str_list[i].isalpha():str_list[i] str_list[i]else:a "A" if str_list[i].isupper() else "a"…

C++学习Day01之初识C++ Helloworld

目录 一、程序二、输出三、分析与总结 一、程序 #include <iostream> //标准输入输出流 i - input 输入 o - output 输出 stream 流 相当于 stdio.h using namespace std; //使用 标准 命名空间 //程序入口函数 int main() {// cout 标准输出流对象// <&l…

Java学习-案例-ATM系统

案例ATM系统 大致思路&#xff1a; 实现功能&#xff1a; 案例代码&#xff1a; Account类&#xff1a; packageatmDemo; publicclassAccount{ privateStringcardId; privateStringuserName; privatecharsex; privateStringpassWord; privatedoublemoney; privatedoublelimit; …

ICLR 2024 | MolGen: 化学反馈引导的预训练分子生成

MolGen: 化学反馈引导的预训练分子生成 英文题目&#xff1a;Domain-Agnostic Molecular Generation with Chemical Feedback 发表会议&#xff1a;ICLR 2024 论文链接&#xff1a;https://arxiv.org/abs/2301.11259 代码链接&#xff1a;https://github.com/zjunlp/MolGen 目录…

可解释性AI(XAI):构建透明和值得信赖的决策过程

可解释性AI&#xff08;XAI&#xff09;旨在提高人工智能系统的透明度和可理解性&#xff0c;使人们更好地理解AI的决策过程和原理。随着AI技术的广泛应用&#xff0c;XAI成为了一个备受关注的重要领域。它不仅有助于建立人们对AI的信任&#xff0c;还可以帮助解决AI伦理和偏见…

Python flask 表单详解

文章目录 1 概述1.1 request 对象 2 示例2.1 目录结构2.2 student.html2.3 result.html2.4 app.py 1 概述 1.1 request 对象 作用&#xff1a;来自客户端网页的数据作为全局请求对象发送到服务器request 对象的重要属性如下&#xff1a; 属性解释form字典对象&#xff0c;包…