Django——会话.CookieSession

2024-05-13 02:04
文章标签 django 会话 cookiesession

本文主要是介绍Django——会话.CookieSession,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Django——会话.Cookie&Session

一、Cookie

会话指的是浏览器与web服务器之间的通信。HTTP协议是无状态协议。web服务器无法知道用户上一次会话数据,用来维护用户在访问网站过程中的状态 , 会话控制使用 Cookie 和 Session 一起实现。

通常把 Session 称为会话对象 , web服务器会给每一个用户创建一个 Session 对象 ,Session 对象在服务器端保存用户数据。Cookie 用于浏览器端保存用户数据。

Cookie 原理:当客户端访问服务端的时候,服务器会生成一份 Cookie 数据传输给浏览器,浏览器会自动把这份 Cookie 数据保存起来。之后浏览器在每一次请求访问的时候都回自动的携带这个 Cookie 数据。

Cookie保存是文本数据,以键值对的方式保存信息

def cookie_set(request):# 设置 Cookie 数据,因为 Cookie 要响应给浏览器# 所以设置 Cookie 数据要使用 HttpResponse 对象或者其子类对象# Cookie 数据在浏览器中保存的时间默认为 2 周response = HttpResponse('设置 Cookie 数据')# set_cookie(key , value) , 设置 Cookie 的数据不能是中文# max_age 设置过期时间, 单位:秒# expires 以时间对象为单位设置过期时间 , datetime.timedelta()response.set_cookie('name','ac' , max_age=30)# datetime.datetime.now()+datetime.timedelta(days=2) 设置两天后过期response.set_cookie('age','27' , expires=datetime.datetime.now()+datetime.timedelta(days=2))return responsedef cookie_get(request):print(request.COOKIES)print(request.COOKIES.get('name'))return HttpResponse('获取 Cookie 数据')def cookie_del(request):# 删除 Cookie 数据需要通过使用 HttpResponse 对象或者其子类对象response = HttpResponse('设置 Cookie 数据')# delete_cookie 删除 Cookie 数据response.delete_cookie('age')return response

验证登录

def index(request):return render(request , 'index.html')def login(request):if request.method == 'GET':return render(request , 'login.html')name =request.POST.get('username')password =request.POST.get('password')if not all([name , password]):return render(request , 'login.html',{'error':'用户名或者密码错误'})# 获取请求中的重定向 url 的参数url = request.GET.get('redirect_url')# 判断是否有携带这个重定向的 url 参数# 有,登录成功之后重定向到参数指定的 url 中# 没有 , 默认响应首页if url:response = redirect(url)else:response = redirect('/index/')response.set_cookie('cookie_data' , name)return responsedef cart(request):# 获取浏览器请求中的 Cookie 数据res = request.COOKIES.get('cookie_data')# 判断是否有携带制定的键值对数据if res:return HttpResponse('购物车页面')else:# 浏览器没有这份数据,需要进行登录url = request.pathreturn redirect(f'/login/?redirect_url={url}')
def wap(func):def inner(request , *args , **kwargs):# 获取浏览器请求中的 Cookie 数据res = request.COOKIES.get('cookie_data')# 判断是否有携带制定的键值对数据if res:# 返回对应的视图函数return func(request)else:# 浏览器没有这份数据,需要进行登录url = request.pathreturn redirect(f'/login/?redirect_url={url}')return inner@wap
def cart(request):return HttpResponse('购物车页面')@wap
def info(request):return HttpResponse('个人信息页面')

Cookie 保存数据大小是有限制的,最大保存 4KB;

一个服务器最多在浏览器上保存 20 个 Cookie 数据;

一个浏览器最多保存 300 个 Cookie。

二、Session

Session 跟 Cookie不同的是 Session 数据是保存在服务器中。

当浏览器第一次请求去服务器的时候,服务器会生成一份 Session 的 id 编号给浏览器,是以 Cookie 的形式发给浏览器, 后续浏览器的请求,都会携带这个份 id 进行访问。

Session也是键值对的方式保存用户数据,Session 在服务器给每一个用户创建一个 Session 对象,对象的 id 值是保存在数据库中。

在操作 Session 的数据必须先迁移数据库。

def session_set(request):# 设置 Session 数据,通过 request 进行设置# 保存 Session 数据之后,会自动生成 sessionid 的数据保存到数据库:django_session 表中request.session['name'] = '阿宸'request.session['age'] = '27'# 设置过期时间 , 单位:秒request.session.set_expiry(60)return HttpResponse('设置 Session 数据')def session_get(request):res = request.session.get('name')return HttpResponse(f'获取 Session 的数据为:{res}')def session_del(request):# 清楚过期的 Session 数据# request.session.clear_expired()# del request.session['name']# 清空所有的数据# request.session.delete()request.session.flush()return HttpResponse('ok')

三、跨站点防御

CSRF:跨站点请求伪造

CSRF指攻击者盗用你的身份,以你的名义发送恶意请求(盗取你的账号 , 购买商品 , 窃取你的个人信息)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

防止 CSRF 的攻击,Django 在中间件中做了 CSRF 的预防机制。

浏览器第一次访问 服务端的时候,Django 会自动随机生成 token 数据以 Cookie 形式发送给浏览器。当浏览器发送了 post 请求的时候,服务端都会进行自动检查 token是否和保存的一致。以这种方式进行避免 csrf 的攻击。

Django 配置的 中间件的 CSRF 只对 post 请求有效,get 请求无效

这篇关于Django——会话.CookieSession的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/984372

相关文章

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简

Linux搭建Python3、Django环境

开发十年,就只剩下这套架构体系了! >>>    好久没写了,朋友们,我又回来了。 安装Python3 Python全部版本下载地址:         https://www.python.org/ftp/ 解决RedHat,使用Python3退格出现乱码问题:         yum -y install readline-devel.x86_64 下载Python3:

Django 第十七课 -- 视图 - FBV 与 CBV

目录 一. 前言 二. FBV 三. CBV 一. 前言 FBV(function base views) 基于函数的视图,就是在视图里使用函数处理请求。 CBV(class base views) 基于类的视图,就是在视图里使用类处理请求。 二. FBV 基于函数的视图其实我们前面章节一直在使用,就是使用了函数来处理用户的请求,查看以下实例: 路由配置: urlpat

django摄影竞赛小程序论文源码调试讲解

2系统关键技术及工具简介 系统开发过程中设计的关键技术是系统的核心,而开发工具则会影响的项目开发的进程和效率。第二部分便描述了系统的设计与实现等相关开发工具。 2.1 Python简介 Python 属于一个高层次的脚本语言,以解释性,编译性,互动性和面向对象相结合。在设计上相比其他语言,它更具有特色语法结构,很强的可读性。 2.2 Django框架 Django是一个开放源

Django 测试指南

#Django 测试指南 对绝大部分人来说,测试Django应用感觉很神秘,他们只是听说代码必须要测试,但是经常找不到线索如何入手。当他们看了Django的测试文档,他们找到深入的哪些功能是可用的,但是如果实现没有任何指导。 这是本博客系列的第一篇,尝试帮助大家减轻压力,使得每个人在测试潮流。假设你从来没有做过任何测试,但是对Python&Django很熟悉了。 我们将贯穿添加测试到pere

使用django-simple-captcha遇到的坑

使用django-simple-captcha遇到的坑 一站点gongshare.com在做注册功能时验证码采用的django-simple-captcha,因为笔者开发环境采用的Windows 64bit系统,结果安装使用的时候接二连三遇到好几个坑。 django-simple-captcha需要依赖django1.3+、PIL1.1.7+或者Pillow2.0+,根据文档安装后开始使用时,

Flask-Session扩展,使用Redis存储会话数据

深入理解Flask-session扩展Redis Flask 应用中使用 flask-session 扩展将 session 数据存储在 Redis 中是一种高效且可扩展的方法,特别是在需要处理大量用户或需要分布式部署的应用中。以下是如何在 Flask 应用中配置 flask-session 以使用 Redis 存储 session 的步骤: 1. 安装必要的库 首先,你需要安装 Flask

解决Django会话中的竞态条件

Django 会话中的竞态条件(race condition)问题通常发生在多个请求几乎同时修改同一个会话数据时,导致数据丢失或数据不一致。这种情况在需要频繁更新会话数据的场景(如实时聊天应用、并发请求处理等)中尤为常见。 1、问题背景 在 Django 中使用会话时,可能会遇到竞态条件,导致数据丢失或不一致。竞态条件是指两个或多个请求同时访问共享资源时,由于执行顺序的不确定性,导致数据不

Django+Vue3前后端分离学习(五)(前端登录页面搭建)

1、如果需要使用组合式API,需要安装插件: npm install vite-plugin-vue-setup-extend --save-dev 在vite.config.js里配置: 首先导入: import VueSetupExtend from 'vite-plugin-vue-setup-extend' 添加: 2、创建login.vue 然后再index.js里添加