Django 中的 COOKie 理解与常用操作

本文介绍了Cookie的基本概念及其在Web开发中的作用。包括如何使用Cookie进行用户认证、存储信息以及与服务器交互的过程。此外还讨论了Cookie的操作方法及注意事项,并对比了基于会话的Cookie的安全优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

理解

Web 服务器收到请求后会返回所请求页面的内容。除了内容之外,还会返回一些 cookie。cookie可以理解为服务器发给客户端的少量信息。准备发送请求时,客户端检查有没有与服务器地址匹配的 cookie,如果有,随请求一起发送。服务器收到请求后把 cookie 放在请求的上下文中解释,然后生成合适的响应。
以使用用户名和密码登录网站为例。通过身份验证后,服务器可能会把一个包含用户名的 cookie发给浏览器,指明那个用户已经登录网站。随后的请求会连同这个信息一起发给服务器,从而渲染针对已登录用户的页面,例如在页面的某个位置显示用户名。然而,会话不是永久的,因为cookie 不会一直存在,而会在某一时刻过期。涉及敏感信息的 Web 应用可能会在几分钟之后就让cookie 过期。要求没这么严格的 Web 应用可能会在半小时之后,甚至几周之后让 cookie 过期。

常用操作

检查cookies是否存在:

request.COOKIES.has_key('<cookie_name>')

获取cookies:

request.COOKIES.get('<cookie_name>')

设置cookies:

response.set_cookie('<cookie_name>', value)

删除cookies:

response.delete_cookie('<cookie_name>')

在 Django 应用中使用 cookie 时要注意以下几点:
❏ 首先,确定你的 Web 应用需要哪种 cookie。你想存储的信息需要在浏览器关闭后留存吗,
能在会话结束后弃之不用吗?
❏ 审慎决定要在 cookie 中存储哪些信息。记住,cookie 中的信息保存在客户端电脑中,这隐
藏着巨大的安全隐患,毕竟你对用户电脑的安全保护措施一无所知。涉及敏感信息时,应
该考虑使用服务器端会话。
❏ 用户可能会把浏览器的安全设置设为较高的级别,禁止使用 cookie,从而导致网站的功能
失效。一定要考虑这种情况,因为你对用户的浏览器设置没有控制权。

如果决定使用客户端 cookie,遵照下述步骤操作:
➊ 必须先检查想使用的 cookie 是否存在。request.COOKIES.has_key(‘’)函数返
回一个布尔值,指明名为 的 cookie 是否存在于客户端电脑中。
➋ 如果目标 cookie 存在,便可以读取其值:request.COOKIES[]。COOKIES属性的值是个字典,因此想读取 cookie 时,把 cookie 的名称(字符串形式)传入方括号中。记住,cookie的值始终为字符串,不管存储的值是什么语义。因此,要做好转换类型的准备(例如使用int()或 float())。
➌ 如果目标 cookie 不存在,或者想更新 cookie,把想保存的值传给生成的响应。要调用的函数是 response.set_cookie(‘’, value),第一个参数是 cookie 的名称,第二个参数是要设定的值。

如果对安全要求更高,应该使用基于会话的 cookie。
➊ 首先,确保 Django 项目的 settings.py 模块中的 MIDDLEWARE_CLASSES列表里有django.contrib.sessions.middleware.SessionMiddleware。如果没有,自行加上。
➋ 使用 SESSION_ENGINE配置会话后端。不同的后端配置参见 Django 文档。
➌ 通过 requests.sessions.get()检查 cookie 是否存在。
➍ 通过会话字典更新或设定 cookie:requests.session[‘’]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值