【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.rhkb.cn/news/251320.html

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

相关文章

Git使用命令大全

命令大全参考阮一峰的博客,根据自己的使用习惯作了调整。 Git常用命令 其他常用的命令 配置Git # 显示当前的Git配置 $ git config --list# 编辑Git配置文件 $ git config -e [--global]# 设置提交代码时的用户信息 $ git config [--global] user.name "[nam…

【Simulink系列】——动态系统仿真 之 离散系统线性离散系统

一、离散系统定义 离散系统是指系统的输入与输出仅在离散的时间上取值,而且离散的时间具有相同的时间间隔。满足下列条件: ①系统(的输入输出)每隔固定时间间隔才更新一次。固定时间间隔称为采样时间。 ②系统的输出依赖当前的…

C++拷贝构造函数、赋值运算符重载

1.拷贝构造函数 拷贝构造函数的写法如图所示 调用方式如下 接下来我来说说它的特征 1.1特征 拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。 拷贝构造函…

debian12 解决 github 访问难的问题

可以在 /etc/hosts 文件中添加几个域名与IP对应关系,从而提高 github.com 的访问速度。 据搜索了解(不太确定),可以添加这几个域名:github.com,github.global.ssl.fastly.net,github.global.fa…

电脑显示mfc140u.dll丢失怎么修复,这几个方法都可以解决

当打开软件时出现"mfc140u.dll丢失"的错误提示,通常是由于缺少或损坏了Microsoft Foundation Class (MFC)库文件导致的。MFC是Microsoft提供的一套用于开发Windows应用程序的类库,它包含了许多常用的功能和组件。 1、以下是可能导致"mfc…

Leetcode—33. 搜索旋转排序数组【中等】

2024每日刷题&#xff08;110&#xff09; Leetcode—33. 搜索旋转排序数组 实现代码 class Solution { public:int search(vector<int>& nums, int target) {int n nums.size();int l 0, r n - 1;while(l < r) {int m l (r - l) / 2;if(nums[m] target) …

面试数据结构与算法总结分类+leetcode目录【基础版】

&#x1f9e1;&#x1f9e1;&#x1f9e1;算法题目总结&#xff1a; 这里为大家总结数据结构与算法的题库目录&#xff0c;如果已经解释过的题目会标注链接更新&#xff0c;方便查看。 数据结构概览 Array & String 大家对这两类肯定比较清楚的&#xff0c;同时这也是面试…

BUUCTF-Real-[Flask]SSTI

目录 漏洞描述 模板注入漏洞如何产生&#xff1f; 漏洞检测 漏洞利用 get flag ​编辑 漏洞描述 Flask框架&#xff08;jinja2&#xff09;服务端模板注入漏洞分析&#xff08;SSTI&#xff09; Flask 是一个 web 框架。也就是说 Flask 为您提供工具、库和技术来允许您构…

【Tomcat与网络9】提高Tomcat启动速度的八大措施

本文我们来看一下如何对Tomcat进行调优&#xff0c;我们对于Tomcat的调优主要集中在三个方面&#xff1a;提高启动速度、提高系统稳定性和提高并发能力&#xff0c;后两者很多时候是相辅相成的&#xff0c;我们放在一起看。 Tomcat现在一般都嵌入在SpringBoot里&#xff0c;因…

2、安全开发-Python-Socket编程端口探针域名爆破反弹Shell编码免杀

用途&#xff1a;个人学习笔记&#xff0c;欢迎指正&#xff01; 目录 主要内容&#xff1a; 一、端口扫描(未开防火墙情况) 1、Python关键代码: 2、完整代码&#xff1a;多线程配合Queue进行全端口扫描 二、子域名扫描 三、客户端&#xff0c;服务端Socket编程通信cmd命…

汽车租赁系统

目录 一.研究背景 二.系统架构 1、SSM 2、JAVA 3、MySQL 4、系统架构 三.系统功能 1、车辆管理 2、客户管理 3、销售管理 4、统计分析 四.系统实现 五.结论总结 一.研究背景 传统的销售与信息统计管理都主要依靠人工&#xff0c;处理出的销售数据量与使用管理系统…

jmeter-03界面介绍

文章目录 主界面介绍工具栏介绍测试计划介绍线程组介绍线程组——选择测试计划&#xff0c;右键-->添加-->线程-->线程组1.线程数2.准备时长(Ramp-up)3.循环次数4.same user on each iteratio5.调度器 主界面介绍 工具栏介绍 新建测试计划&#xff1a;创建一个空白的测…

外包干了10个月,技术退步明显...

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

【数据分享】1929-2023年全球站点的逐日最高气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2023年全球气象站…

Flutter canvas 画一条会动的波浪线 进度条

之前用 Flutter Canvas 画过一个三角三角形&#xff0c;html 的 Canvas 也画过一次类似的&#xff0c; 今天用 Flutter Canvas 试了下 感觉差不多&#xff1a; html 版本 大致效果如下&#xff1a; 思路和 html 实现的类似&#xff1a; 也就是找出点的位置&#xff0c;使用二阶…

python numpy np.log 底数

np.log()&#xff0c;以e为底的对数 根据对数函数的性质&#xff0c;如果要以3位底的对数&#xff0c;需要除以np.log(3)&#xff0c;即np.log(x)/np.log(3)

『运维备忘录』之 Systemd 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

数据结构—基础知识:哈夫曼树

文章目录 数据结构—基础知识&#xff1a;哈夫曼树哈夫曼树的基本概念哈夫曼树的构造算法哈夫曼树的构造过程哈夫曼算法的实现算法&#xff1a;构造哈夫曼树 数据结构—基础知识&#xff1a;哈夫曼树 哈夫曼树的基本概念 哈夫曼&#xff08;Huffman&#xff09;树又称最优树&…

2024美赛C题完整解题教程及代码 网球运动的势头

2024 MCM Problem C: Momentum in Tennis &#xff08;网球运动的势头&#xff09; 注&#xff1a;在网球运动中&#xff0c;"势头"通常指的是比赛中因一系列事件&#xff08;如连续得分&#xff09;而形成的动力或趋势&#xff0c;这可能对比赛结果产生重要影响。球…

ChatLaw:基于LLaMA微调的法律大模型

文章目录 动机数据组成模型框架模型评估 北大团队发布首个的中文法律大模型落地产品ChatLaw&#xff0c;为大众提供普惠法律服务。模型支持文件、语音输出&#xff0c;同时支持法律文书写作、法律建议、法律援助推荐。 github地址&#xff1a;https://github.com/PKU-YuanGroup…