Django框架cookie和session的详解

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

1,我先带大家了解一下HTTP的 “无状态” 模式:

什么是无状态模式 -->> 就是用户每次请求都是独立的,它的执行情况和结果与前面的请求和后面的请求都是毫无直接关系。

就好像人生只如初见,见面过后,你不认识我,我又不认识你一样。对服务器来说,每次请求都是全新的。

比如:某用户输入账号和密码后登录到www.baidu.com网站,再次请求百度服务器,用户登录的状态就消失,仿佛又以新的用户身份访问www.baidu.com网站,这就是HTTP的 “无状态” 模式。

2,Cookie 解决 HTTP的“无状态”特点

在1993年3月,网景公司的前雇员Lou Montulli 发明了Cookie,来解决这样的HTTP的 “无状态” 模式。

Cookie的理解: cookie 其实就是键值对(key:value)格式的小段信息,它是由服务器发送过来存储在浏览器中的一组组键值对数据;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能通过Cookie的内容来判断这个是“谁”了。

2.1conkie的作用:

主要就是用来登录状态的判定

2.2cookie的特点:
	1. 以键值对的方式存储在浏览器当中
	2. cookie 基于域名安全,意思就是不同的域名cookie是不能相互访问的,
	比如:同一浏览器中同时访问 "www.baodu.com" 和 "www.soufun.com" ,它们各自网站的cookie 是不能相互访问获取的,这是它的独立性和安全性。
	3. 浏览器访问某一个网站的时候,会将浏览器存储的相关网站的所有的cookie 都发送给该网站的服务器。服务器需要使用 request.COOKIES 来获取cookie数据。
	4. cookie是有过期时间的,如果不指定时间,默认会关闭浏览器则失效。设置时间:max_age 单位:秒(s)
2.3cookie的优点以及缺点:

优点: 解决了HTTP协议的“无状态”模式。
缺点: 1. 安全性较差;2. 存储量小,最大支持4096字节。需要靠 Session 来弥补。

3,Django操作cookie

3.1 设置Cookie

可以通过HttpResponse对象中的set_cookie方法来设置cookie

相关代码如下:

from django.shortcuts import render,HttpResponse
class CookieSessionView(View):
    """ 测试 Coolie
    http://127.0.0.1:8000/cookies/
    """
    def get(self,request):
        """
        设置cookie
        """
        # HttpResponse.set_cookie(cookie的名, value=cookie的值, max_age=cookie有效期)
        response = HttpResponse("设置cookie OK")
        response.set_cookie("username","lin123",max_age=3600) # 有效时间1h
 
        return response

请求结果:

在这里插入图片描述

3.2读取cookie

可以通过HttpRequest对象的COOKIES属性来读取本次请求携带的cookie值。request.COOKIES为字典类型。

相关代码如下:

from django.shortcuts import render,HttpResponse
from django import http
from django.views import View
 
class ReadCookeSessionView(View):
    """获取 Coolie
    http://127.0.0.1:8000/readcookies/
    """
    def get(self,request):
        """
        读取 Coolie ; 通过 键 获取 值
        """
        cookie1 = request.COOKIES.get("username")  # 获取普通的cookie
        print(cookie1)
        return http.HttpResponse(f"读取Coolie:{cookie1}")

运行的结果:

在这里插入图片描述

4,关于session的详解和使用

4.1 session的由来

Cookie虽然在一定程度上解决了“保持状态”的需求,但是由于Cookie本身最大支持4096字节,以及 Cookie 本身保存在客户端,可能被拦截或窃取,因此就需要有一种新的东西,它能支持更多的字节,并且他保存在服务器,有较高的安全性。这就是Session

我们可以给每个客户端的Cookie分配一个唯一的id(也就是session_id),这样用户在访问时,通过Cookie,服务器就请求的用户是“谁”。然后我们再根据不同的 Cookie 的 id,在服务器上保存一段时间的私密资料,如“账号密码”等等。

总结:session的作用:1. 能支持更多的字节;2. 有较高的安全性。说白了就是可以弥补Cookie的缺点

4.2 Session 存储方式

优先选择存储 NoSQL 类型的Redis数据库中。

4.3 Session相关方法(Django)
1.设置Session:可以用request.session["key"] = "value"来进行设置
2.Session 根据键读取值:request.session.get('key',None)
3.清除所有Session,在存储中删除值部分:  request.session.clear()
4.清除session数据,在存储中删除session的整条数据: request.session.flush()
5.删除session中的指定键及值,在存储中只删除某个键及对应的值:  del request.session["key"]
6.设置session的有效期: request.session.set_expiry(value)
举例下列代码只是设置Session相关。
        from django.shortcuts import render,HttpResponse
    from django import http
    from django.views import View

    class BooksView(View):
        """ 请求url
        http://127.0.0.1:8000/setsession/
        """
        def get(self,request):

            # 设置cookie: 使用响应对象设置
            # 先创建出响应对象
            response = HttpResponse("OK")

            # 响应对象调用set_cookie()
            response.set_cookie("username","boy123",max_age=3600)

            # 设置session: 假装登录后使用session记住用户登录状态
            # request.session["key"] = "value"
            request.session["username"] = "boy123"

            # 3. 使用上下文渲染"book.html",并返回给客户端
            return response

以上就是小编今天为大家带来的内容
小编本身就是一名python开发工程师我自己花了三天时间整理了一套python学习教程
从最基础的python脚本到web开发,爬虫,数据分析,数据可视化,机器学习,等,这些资料有想要的小伙伴 点击 即可领取

Session机制全解析:从原理到分布式实践与安全加固 在Web开发中,HTTP协议的无状态特性是构建交互式应用的基础挑战。为解决用户身份识别与状态维持问题,会话管理技术应运而生。其核心原理是通过服务器端创建唯一的Session ID,并借助Cookie等机制在客户端与服务器间传递,从而将离散的HTTP请求关联为有状态的对话。这项技术的核心价值在于为电商、社交、办公等系统提供了可靠的状态管理基础。在分布式架构成为主流的今天,Session的存储与共享方案直接影响着系统的扩展性与一致性。本文深入探讨了SessionCookie、Token(如JWT)的机制差异与 阅读详情

相关推荐

Djangocookie(一)

什么是cookie 不知道大家有没有遇到过这样一种情况,当我们通过账户名密码登录一些网站后,下次再打开该网站就不需要填写用户名密码就直接是登录状态了。 聪明的小伙伴一定能够想到一定是有什么神奇的东东存储了登录所需要的相关信息,让我们再次登录网站时,由网站直接利用这个神奇的东东来验证我们是否登陆过,而这个就是我们这篇文章描写的主角——cookie cookie在英文中的原意是甜饼,小饼干,但在这里它却不是一种食物,简单来讲,cookie是保存在浏览器端的键值对,可以用来存储用户登录的凭证,以及一些关于

qq_45642851的博客 1288

Django学习笔记(5):CookieSession

1.状态保持:Cookie HTTP协议是无状态的,下一次访问一个页面时并不知道上一次对这个页面进行了怎样的操作。 Cookie是基于web安全的。 如何设置Cookie:需要一个HttpResponse对象或他子类的对象(HttpResponseRedirect,JsonResponse),其有一个set_cookie方法。 Cookie是一个字典。 示例: views.py def set_c...

Zijeak的博客 364

DjangoCookie相关操作

浏览器访问服务端,带着一个空的cookie,然后由服务器产生内容,浏览器收到相应后保存在本地;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能通过Cookie的内容来判断这个是“谁”了。

景天科技苑 2032

Django(5)|Django中的cookiesession

作用是来获取用户存入的cookiesession信息,以此为依据,在用户进入其他页面时候,每次使用装饰器进行判断,如果用户是登录进来的,则可以访问,如果用户是直接输入的网址进入,则会返回至登录页面。由于http请求是无状态的,无法记录身份,所以需要一种机制能够长期的记录身份,最早出现的就是cookie。而cookie是由服务器下发给用户的,保存在用户的浏览器上面,用于校验身份的数据。写一个登出页面,目的是为了删除cookiesession的存储信息,使用户退出后,不可直接进入页面。

不愿意透露姓名的网友 2183

Django框架(21.Django中设置cookie以及获取cookie

状态保持 http协议是无状态的。下一次去访问一个页面时并不知道上一次对这个页面做了什么 Cookie 1.cookie是由服务器生成,存储在浏览器端的一小段文本信息。 2.cookie的特点: 以键值对方式进行存储。 通过浏览器访问一个网站时,会将浏览器存储的跟网站相关的所有cookie信息发送给该网站的服务器。 cookie是基于域名安全的。 cookie是有过期时间的......

Mogul的博客 1万+

django框架cookiesession用法实例详解

本文实例讲述了django框架cookiesession用法。分享给大家供大家参考,具体如下: 首先知道http协议 http协议它是无状态的协议,验证的信息不会保留 基于请求响应,短连接 cookie 指一段小信息,内部是一组组的键值对,保存在客户端 访问一个地址时,服务器生成一个cookie,由浏览器保留在本地,再次访问地址时就会携带这个cookie,一般用于用户信息的验证 cookie的设置: ​ obj.set_cookie(key,value,...) 下面...

cecellialiu的博客 212

ajax获取session值_Django框架cookiesession详解

1,我先带大家了解一下HTTP的 “无状态” 模式:什么是无状态模式 -->> 就是用户每次请求都是独立的,它的执行情况果与前面的请求后面的请求都是毫无直接关系。就好像人生只如初见,见面过后,你不认识我,我又不认识你一样。对服务器来说,每次请求都是全新的。比如:某用户输入账号密码后登录到www.baidu.com网站,再次请求百度服务器,用户登录的状态就消失,仿佛又以新的用户身...

weixin_39942318的博客 332

[Django框架] 四、CookieSession

我们可以给每个客户端的cookie分配一个唯一的id,这样用户在访问时,通过cookie,服务器就知道来的人是“谁”。cookie虽然在一定程度上解决了"保持状态"的需求,但是由于cookie本身最大支持4096字节,以及cookie本身保存在客户端,可能被拦截或窃取,因此就需要有一种新的东西,它能支持更多的字节,并且他保存在服务器,有较高的安全性。以登录页面为例,登陆成功后设置cookie,在登录其他页面时,检测cookie,如果存在则直接跳转,如果cookie不存在,则跳转登陆页面。

倾城 309

Django中消息中间键form组件的运用

补充知识 cookie中文问题 # 解决方式1: set_cookie(‘k1’,’你好’.encode('utf-8').decode('iso-8859-1')) request.COOKIES['k1'].encode('iso-8859-1').decode('utf-8') # 解决方式2 import json json_str = json.dumps('你好',en...

weixin_30725315的博客 126

Django基础(四)

Django-4 知识预览 分页器(paginator) COOKIESESSION Django的用户认证 FORM 回到顶部 分页器(paginator) 分页器的使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2...

diandinai8712的博客 145

Django进阶

Django进阶     CookieSession     AJAX     Django中间键     FormModelForm组件     Auth认证组件 转载于:https://www.cnblogs.com/study-learning/p/9969757.html...

denglieyong5339的博客 102

flask中request中的一些方法 cookiesession的创建、删除以及使用 上传图片使用图片 装饰器(多个装饰器顺序) 对于manage.py的补充 项目DEBUG调试的开启

文章目录一、对于manage.py的补充1. 使用flask插件 完成migrate、runserver等方法① 安装Flask-script② 在文件中导入Manager,实例化方法二、配置pycharm启动项目DEBUG调试的开启三、flask请求request1. Django中的request请求一些方法2. Flask中的request请求一些方法四、request获取图片的方法五、CO...

langdei的博客 484

django

一、列举django中间件的5个方法?以及django中间件的应用场景? django为使用者提供的干预所有请求响应的接口方法,比如验证非法用户(有一些ip非法频繁访问) 1、process_request:在匹配路由url之前调用 2、process_view:在调用视图函数之前调用 3、process_template_response:只有视图函数中使用render渲染才调用 4、proc...

panjunxiao的博客 202

关于django的一些基础知识

1.中间件   中间件的作用 : 在全局范围内控制django的输入输出的钩子函数   中间件中有5种方法:     process_request : 请求进来时,进行验证     process_views : 路由匹配成功之后,能够得到视图函数     process_exception : 处理异常时执行     process_template_responseproc...

weixin_34311757的博客 148

Django web 框架

目录 与Django的第一次见面 安装、文件解释与基本命令 Settings Models Views 路由系统 模板 Form表单 CookieSession CSRF防护 转载于:https://www.cnblogs.com/freely/p/6911471.html...

afftl7302的博客 85

Django介绍

Django 简介 Django 路由层 Django 视图层 Django 模板层 Django 模型层 单表操作 Django模型层 多表操作 Django组件-Cookiesession Django组件-用户认证 Django 组件- 中间件 Django 组件- 分页器 Django组件-forms组件 Django与Ajax 防止xss攻击,过滤scr...

weixin_30629977的博客 68

Django视图

视图的作用流程:一、错误视图    404视图:找不到网页(url匹配不成功时返回)时返回500视图:在视图代码中出现错误(服务器代码错误)400视图:错误出现在客户的操作二、HttpRequest对象(1)概述:服务器接收http请求后,会根据报文创建HttpRequest对象,视图的第一个参数就是HttpRequest对象,django创建的,之后调用视图时传递给视图。(2)属性:path:请...

weixin_38654336的博客 238

Yuan先生的Django --博客园

1 Web应用 https://www.cnblogs.com/yuanchenqi/articles/8869302.html 2 http协议: https://www.cnblogs.com/yuanchenqi/articles/8875623.html 3 web框架 https://www.cnblogs.com/yuanchenqi/articles/894...

weixin_30707875的博客 287

Django 框架

第一篇: Django简介 第二篇: 路由控制 第三篇: 视图层 第四篇: 模版层 第五篇: 1.ORM常用字段及参数2.F与Q查询,事务及其他 第六篇: 1.Django与Ajax 2.分页器组件 3.form组件 4.CookieSession组件 5.中间件 6.Auth认证模块 第七篇(Rest Framework):1.R...

weixin_30438813的博客 151
上一篇: 三分钟学会Django缓存,让你的网站提速十倍以上
下一篇: 带你走进python集合的set内心世界
python程序员小'鹏
博客等级 码龄6年 161粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值