【Django学习笔记 - 6】:cookie的配置

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
.cn 域名,1个 12个月
简介: 【Django学习笔记 - 6】:cookie的配置

一、cookie介绍


Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。 实际上cookie是一个很小的文本文件,是浏览器储存在用户的机器上的。Cookie是纯文本,没有可执行代码。储存一些服务器需要的信息,每次请求站点,会发送相应的cookie,这些cookie可以用来辨别用户身份信息等作用。


1、cookie的特点  


   Cookie以键值对的格式进行信息的存储。


   Cookie基于域名安全,不同域名的Cookie是不能互相访问的,如访问jd.com时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到jd.com写的Cookie信息。


   当浏览器请求某网站时,会将浏览器存储的跟网站相关的所有Cookie信息提交给网站服务器。  


2、cookie的类型  


   可以按照过期时间分为两类:会话cookie和持久cookie。


   会话cookie是一种临时cookie,用户退出浏览器,会话Cookie就会被删除了。


   持久cookie则会储存在硬盘里,保留时间更长,关闭浏览器,重启电脑,它依然存在,通常是持久性的cookie会维护某一个用户周期性访问服务器的配置文件或者登录信息。  


3、cookie产生流程


   在第一次进行访问服务器的时候,是没有cookie的携带的

   第二次访问,通过一些参数特征,来了解到是哪一个用户发起的请求

   在之后的访问,都会携带着更新后的cookie发起访问。  


   就比如:当你第一次遇见你的同桌时,你的脑子里是没有任何关于他的特征的,而在第二次遇见他的时候,你的大脑已经有了他的一些特征,比如高矮胖瘦美丑等。简单来说就是“一回生,二回熟”


图文解析


    首次访问:未携带cookie



70f3fbeb05a4471d8ab75b781c52d517.png

服务器返回cookie到客户端

c3c6dd8821594980a521aa1ca7c42797.png


  • 再次访问:客户端会携带着服务器返回的cookie进行访问。



3b640f827eed43448d993604d8761705.png




4、cookie所在域


   所在域的格式:domain="域名"


比如在下图中,当我们请求另一台服务器1时,如果服务器1和第三方广告服务器(简称:第三方)有合作,则第三方可允许访问服务器1的域(domain="server1.com"),就会弹出一些广告商品等,当我们访问第三方并收藏一些商品等,三方服务器就会获取我们行为信息(这些信息被保存在cookie值中并返回到我们的客户端保存),我们的cookie值会被刷新。



f2163fd174ef4bc0b09df70f0dc8f5f1.png


当我们再次携带这些cookie信息访问服务器2时,如果服务器2和第三方有合作(也就是第三方可允许访问服务器2的域),则第三方会根据我们已有的cookie信息(比如我们收藏了什么商品),来推断用户的喜好,从而推荐商品。


如果我们在第三方买了一些东西,则我们的cookie值又被刷新,就这样反反复复,我们的cookie值的信息越来越多,商家推荐的商品也越来越准。(从而拿下我们)



3d680d686b32429daef2b69792933513.png





二、cookie的配置



    添加Cookie:


 

response.set_cookie(self, key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None)
    response.set_signed_cookie(self, key, value, salt='', **kwargs)

   key: cookie的键


   value:cookie的值


   max_age:表示cookie的有效期, 单位是秒。


   expires:当设置为整型时表示cookie有效期(单位是秒),当设置为datetime类型时表示cookie的截止期


    path:表示cookie所在的路径,'/'表示cookie存放于根路径


   domain:'lqmyx.com', 该域名下的所有域名


www.lqmyx.com/api.lqmyx.com/meinv.lqmyx.com/static/lq都能够访问到cookie

   secure:值的类型为布尔类型,当值为True,只允许https对cookie进行访问

   httponly:值类型为布尔类型,当值为True,表示不允许前端的js获取cookie

   samesite:lax或strict时,表示不允许携带cookie进行跨源的请求。  



1、max_age和expires参数  


   key: cookie的键


   value:cookie的值


   max_age:表示cookie的有效期, 单位是秒。


   expires:当设置为整型时表示cookie有效期(单位是秒),当设置为datetime类型时表示cookie的截止期


   expires可接收三种类型的参数:


       int整型,表示的含义与max_age是一样的,即多少秒后自动清除cookie值


       格林威治时间格式:'Week, Month-Day-Year Hour:minute:second GMT',Week和Month要用英文缩写。例如 expires='Wed, Aug-3-22 22:01:00 GMT'


       datetime对象:例 expires=datetime(2022, 3, 26, 11, 0, 0),expires=datetime(年, 月, 日, 时, 分, 秒)


   注意:当在配置cookie时即不设置max_age也不设置expires,即表示会话cookie,也就是关闭浏览器再次打开之后,就没有该cookie值了。


   当设置expires为int类型时表示的是有效时间,比如expires=10,表示有效时间为10秒。


   当设置expires为格林威治时间或datetime类型时,表示的是截止时间,且截止时间会比我们的时间多8个小时。



  • views.py文件中写上设置cookie的函数

89ebf302ed394111b74453424323a70c.png


根路由中设置路由路径:不添加任何访问路径,就会分发到子路由中去

1489032ec93e4aa89155f0f83266cecc.png

在子路由中设置路由路径

947ed19a9792461cbbed790fb881c8eb.png

运行Django项目查看cookie

6ea6daca93194e99a2c532548bf2770c.png

7f028ef662124fc4809714480bc21817.png

然后任意点击设置的cookie键,即可查看它的创建时间和到期时间

33e573bd6c4a4e50bbac719487ccca84.png

ca70449694a24110a8bc4f38aa588d22.png

5a60e3356e1b4d6cb56cc556ae17b61b.png

于是我们回到主路由的路径并刷新,重新查看cookie,会发现设置的age已经消失

5abcebcd54704b7a846ec93f7e5c9221.png


然后,关闭浏览器再重新打开,查看cookie,发现name(会话cookie已消失),只剩下sex

cfe5fc908e154fcfa14586e843cf11b4.png


2、max_age和expires同时存在的情况


第一种情况:


例:response.set_cookie('age', '18', max_age=10, expires=60)

当expires的时间格式为非datetime时,使用的是max_age的值


第二种情况:


例:response.set_cookie('age', '18', max_age=10, expires='Mar, Sat-27-22 22:00:00 GMT')

当expires的时间格式为datetime时,使用的是expires的值



3、cookie加盐

将cookie进行加盐(加密)需要用到的方法:set_signed_cookie


   在settings.py文件的配置参数中有一个SECRET_KEY,这个就是我们在创建Django项目时自动创建的加密盐,我们为cookie进行加盐时可以使用到它

    将cookie进行加盐演示


   使用settings.py中的加密盐时要先导入settings(例:from firPro import settings)


25cfba31d9a743f29b669fd1aac5c061.png


运行Django项目,然后进入网页检查,可以看到cookie,冒号前的是名文,冒号后的是密文


fe8ebe96a2e4444d957d07adc591134d.png

bac487a9eeed4d4eaf47ea7e867bde9e.png



4、httponly演示


httponly:值类型为布尔类型,当值为True,表示不允许前端的js获取cookie。主要作用是不然其他人获取到一些cookie参数进行修改


比如,设置cookie的weight时添加httponly=True

126393c66da1429f96d8d2439f8bf59b.png


然后运行Django项目,进入网页检查,进入控制台,输入document.cookie,来查看cookie值,发现weight不在里面,即不允许前端的js获取cookie


414ec9b5d3d74ad0b9d7fac32150852b.png

但是在响应中还是可以看到的

801b4caebfe64fa5b34b09a0bd8396ea.png

相关文章
|
2月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
1月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
63 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
前端开发 JavaScript 安全
node登陆接口权限配置cookie-parser、express-session
本文介绍了在Node.js中使用express-session和cookie-parser实现登录接口的权限配置,包括验证码接口的生成和自定义中间件的创建,用于验证用户权限。
28 0
node登陆接口权限配置cookie-parser、express-session
|
3月前
|
关系型数据库 MySQL 机器人
Django入门到放弃之数据库配置
Django入门到放弃之数据库配置
|
3月前
|
前端开发 JavaScript 安全
Django入门到放弃之常见配置及基本命令
Django入门到放弃之常见配置及基本命令
|
4月前
|
API 数据库 数据安全/隐私保护
Django配置api、管理系统和视图
Django配置api、管理系统和视图
115 1
|
4月前
|
存储 JavaScript 前端开发
Django + Vue 实现图片上传功能的全流程配置与详细操作指南
 在现代Web应用中,图片上传是一个常见且重要的功能。Django作为强大的Python Web框架,结合Vue.js这样的现代前端框架,能够高效地实现这一功能。本文将详细介绍如何在Django项目中配置图片上传的后端处理,并在Vue前端实现图片的选择、预览和上传功能。
|
3月前
|
关系型数据库 应用服务中间件 数据库
如何安装和配置 Django 与 Postgres、Nginx 和 Gunicorn
如何安装和配置 Django 与 Postgres、Nginx 和 Gunicorn
39 0
|
5月前
|
API 数据安全/隐私保护 网络架构
在django3中配置应用的权限
【6月更文挑战第9天】该文档介绍了Django REST Framework的权限管理。总结来说,本文介绍如何设置严格项目权限和如何通过自定义权限控制对特定资源的访问。
56 10
在django3中配置应用的权限
|
5月前
|
关系型数据库 MySQL 数据库
Django与MySQL:配置数据库的详细步骤
Django与MySQL:配置数据库的详细步骤