Django会话,用户和注册之cookie
HTTP状态和TCP不一样,HTTP是无状态的,也就是这一次请求和下一次请求之间没有任何状态保持,我们无法根据请求例如IP来识别是否在同一人的连续性请求。就像我们在访问网站的时候,输入了用户名和密码,但是如果跳转到另一个页面,又必须让我们再输入一次用户名和密码,这肯定是无法接受的。这一章就是要介绍如何保持状态的问题。
首先来看下cookies:
Cookies就是为解决HTTP的无状态的。Cookies是浏览器为web服务器存储的一小段消息。每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies 我们可以通过抓包和在浏览器上看下存放的cookies。例如在浏览器上可以点击下图的红框显示出该网站的cookies值
那么在django中如何查看上报并且设置cookies值呢。首先来看获取,每一个HTTPRequest对象都有一个COOKIES对象。通过request.COOKIES获取。这是一个字典,可以通过request.COOKIES[‘name’]的方式来提取出某个cookie值
写cookies需要用到HttpResponse对象的set_cookie()方法。来看下面的这个例子:设置一个name的cookie值
def function_test(request):
response=HttpResponse('your name is zhf')
response.set_cookie("name",'zhf')
return response
在访问的网页中可以查看到我们设置的cookie值
在set_cookies中可以传递一些参数来控制cookie的行为。Cookie值有如下的值需要设置
max_age: cookie需要延续的时间(以秒为单位) 如果参数是\ `` None`` ,这个cookie会延续到浏览器关闭为止
expires: cookie失效的实际日期/时间。 它的格式必须是: "Wdy, DD-Mth-YY HH:MM:SS GMT"`` 。如果给出了这个参数,它会覆盖max_age参数
path: cookie生效的路径前缀。 浏览器只会把cookie回传给带有该路径的页 面,这样你可以避免将cookie传给站点中的其他的应用
domain: 这个cookie有效的站点。 你可以使用这个参数设置一个跨站点(cross-domain)的cookie。 比如,\ `` domain=".example.com"`` 可以设置一个在\ `` www.example.com`` 、\ `` www2.example.com`` 以及\ `` an.other.sub.domain.example.com`` 站点下都可读到的cookie。如果这个参数被设成\ `` None`` ,cookie将只能在设置它的站点下可以读到
Secure: 如果设置为 ``True`` ,浏览器将通过HTTPS来回传cookie
我们来测试一下,首先设置max_age参数。设置为60秒,也就是一分钟response.set_cookie("name",'zhf',max_age=60)
然后来看下浏览器中存储的值。可以看到到期时间已经发生变化,设置前是浏览会话结束时,现在变成了3:03:22.相比创建时间,正好相差1分钟
我们再加入expires。注意expires参数必须是datetime.datetime的类型
response.set_cookie("name",'zhf',max_age=60,expires=datetime.datetime(2018,02,07,11,0,0))
这是因为在set_cookie中会判断是否是datetime.datetime的实例
if expires is not None:
if isinstance(expires, datetime.datetime):
if timezone.is_aware(expires):
expires = timezone.make_naive(expires, timezone.utc)
可以看到expires值已经覆盖了max_age参数。
接收和设置cookie的功能已经介绍完了,cookie值对于服务器识别用户上确实起到了很便捷的作用。那么缺点是什么呢。缺点就是太容易被伪造。在之前的网络爬虫的章节http://www.cnblogs.com/zhanghongfeng/p/7595846.html
中已经提到通过抓取cookie值实现模拟登陆,所以一旦cookie值被获取到。哪将是非常危险的事情。但是django自带了session框架解决这个问题,下一章我们将介绍session的使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架