【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.hqwc.cn/news/457716.html

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

相关文章

SpringCloud--Gateway解析

一、Gateway简介 Gateway是Spring Cloud官方推出的第二代微服务网关,它旨在提供统一的路由方式以及为微服务应用提供强大的负载均衡能力。与第一代Spring Cloud Netflix Zuul相比,Spring Cloud Gateway在性能、可扩展性、易用性等方面都有了显著的提升。…

Spring框架入门指南

文章目录 Spring特点IoCAOPSpring事务事务隔离级别Spring注解Spring生命周期Spring创建完毕想要初始化一些操作注解的使用与开发Spring配置类加载XML配置文件静态工厂方法和实例工厂方法循环依赖(循环引用)三级缓存解决循环依赖问题SpringAOP延申动态代理…

Stable Diffusion 模型下载:Schematics(原理图)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 “Schematics”是一个非常个性化的LORA,我的目标是创建一个整体风格,但主要面向某些风格美学,因此它可以用于人物、物体、风景等…

如何在 Ubuntu 上安装 ONLYOFFICE 文档 8.0

通过使用社区版,您有能力在您自己的服务器上部署 ONLYOFFICE 文档,从而使在线编辑器与 ​​ONLYOFFICE 协作平台​​​或​​其他热门系统​​进行无缝集成。 ONLYOFFICE 文档是什么 ONLYOFFICE 文档是一款全面的在线办公工具,提供了文本文档…

视频无损放大修复工具Topaz Video AI 新手入门教程

想要自学Topaz Video AI ?Topaz Video AI 如何使用?这里给大家带来了视频无损放大修复工具Topaz Video AI 新手入门教程,快来看看吧! 下载:Topaz Video AI for mac 导入您的文件 有两种方法可以将文件导入 Topaz Vid…

用于制作耳机壳的倒模专用UV树脂有什么特点?

制作耳机壳的UV树脂耳机壳UV胶具有以下特点: 快速固化:UV树脂可以在紫外线的照射下迅速固化,大大缩短了制作时间。高硬度与高耐磨性:UV树脂具有较高的硬度和耐磨性,能够提供良好的保护效果。透明度高:UV树…

Stata学习(1)

一、五大窗口 Command窗口:实现人机交互 来导入一个自带数据: sysuse是导入系统自带的数据,auto导入该数据的名称,后面的clear是清除之前的数据 结果窗口:展示计算结果、查找功能 在Edit的find可以实现查找功能&#…

go modules使用

创建项目 在使用GoLand创建项目的时候,会自动创建对应的go.mod文件。 创建完后 创建文件 创建一个main.go的文件,里面print一个hello world。 在运行时可以设置是否采取先生成文件再运行。 为空的话则不输出。 下面的Environment为设置运行的环境…

显示器校准软件:BetterDisplay Pro for Mac v2.0.11激活版下载

BetterDisplay Pro是一款由waydabber开发的Mac平台上的显示器校准软件,可以帮助用户调整显示器的颜色和亮度,以获得更加真实、清晰和舒适的视觉体验。 软件下载: BetterDisplay Pro for Mac v2.0.11激活版下载 以下是BetterDisplay Pro的主要…

Multisim14.0仿真(五十五)汽车转向灯设计

一、功能描述: 左转向:左侧指示灯循环依次闪亮; 右转向:右侧指示灯循环依次闪亮; 刹车: 所有灯常亮; 正常: 所有灯熄灭。 二、主要芯片: 74LS161D 74LS04D 74…

Python(SQLite)executescript用法

SQLite 数据库模块的游标对象还包含了一个 executescript() 方法,这不是一个标准的 API 方法,这意味着在其他数据库 API 模块中可能没有这个方法。但是这个方法却很实用,它可以执行一段 SQL 脚本。 例如,如下程序使用 executescr…

【Spring Boot】第一篇 创建简单的Spring Boot项目

导航 一. 简介二. 创建简单的Spring Boot项目1. 工具选择和版本确定2. 创建步骤 三. 部署项目四. 测试验证 一. 简介 Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。它简化了Spring应用程序的创建和配置过程,同时提供了很多开箱即用的功能&am…