当前位置:   article > 正文

Django会话技术Cookie&Session

Django会话技术Cookie&Session

简介

在Web开发中,会话跟踪是指识别和管理用户与服务器之间的一次交互过程。由于HTTP协议是无状态的,即服务器无法记忆与客户端之前的交互信息,因此需要借助其他技术来实现会话跟踪。

CookieSession是两种常用的会话跟踪技术。

Cookie

Cookie是服务器端存储在客户端浏览器中的少量数据。它通常包含一个键值对,用于标识用户或保存用户会话期间的一些信息。Cookie由HTTP响应头中的Set-Cookie字段发送到客户端浏览器,并保存在客户端浏览器的内存或硬盘中。当客户端浏览器再次向服务器发送请求时,会将Cookie信息包含在HTTP请求头中的Cookie字段中。

Session

Session是服务器端存储的用户会话信息。与Cookie不同的是,Session保存在服务器端,而不是客户端。服务器会为每个用户创建一个Session对象,用于存储该用户会话期间的信息。Session对象通常包含一个唯一的标识符,称为Session ID。Session ID由服务器生成并发送给客户端浏览器,通常保存在Cookie中。当客户端浏览器再次向服务器发送请求时,会将Session ID包含在HTTP请求头中的Cookie字段中。服务器会根据Session ID获取相应的Session对象,并从中获取用户会话信息。

 

 测试一下 我们再Django模型里创建一个用户模型 用户后期用户登录测试

创建后记得执行迁移

  1. python3 project2/manage.py makemigrations
  2. python3 project2/manage.py migrate

 创建几个页面进行注册登录页面的学习

 

 先简单的写一个注册的视图函数进行注册测试

因为在设计模型的时候 name设置的是唯一 所以先判断一下用户名是否存在 如果用户名存在就不予注册,注册成功后重定向跳转到到登录页面

可以看到通过注册页面的表单已经成功将数据插入到了数据库中

 在注册页面的时候我们碰到了一个CSRF的验证 那么什么是CSRF

CSRF,全称为 Cross-Site Request Forgery,中文名为跨站请求伪造,是一种网络攻击方式。它利用用户在网站A的已登录状态(即浏览器中保存了该网站的Cookie或其他认证信息),诱导用户在不知情的情况下访问网站B,从而使浏览器向网站A发送一个伪造的请求。由于网站A误以为这个请求是用户自己发起的,所以可能会执行一些敏感操作,如转账、修改密码、发帖等,从而对用户造成损失。

CSRF攻击的关键点在于:

  • 用户已登录目标网站:攻击的前提是用户在一个网站上保持了活跃的会话状态。
  • 浏览器自动发送凭证:浏览器会自动带上该网站的Cookie或认证信息给所有对该网站的请求,无论请求是用户主动发起还是由恶意网站触发。
  • 用户被诱导交互:攻击者通过电子邮件、即时消息、第三方网站链接等方式诱使用户点击,用户可能在不知情的情况下触发了针对另一个站点的恶意操作。

为了防范CSRF攻击,网站通常会采用以下措施:

  • CSRF Token:服务器在生成表单时,同时生成一个唯一的CSRF Token放入表单的隐藏字段,并在用户的会话中保存这个Token。当表单提交时,除了正常的表单数据外,还需验证这个Token是否正确。
  • Double Submit Cookie:类似CSRF Token,但是将Token作为Cookie发给用户浏览器,同时在表单中也放置同样的Token值。服务器在处理请求时,除了验证Cookie中的Token,还会验证表单提交的Token是否一致。
  • SameSite Cookie属性:设置Cookie的SameSite属性为Lax或Strict,可以限制第三方网站在一定条件下不能读取或发送Cookie,减少CSRF的风险。
  • 验证Referer和Origin头部:检查HTTP请求的Referer或Origin头部,确认请求是否从预期的源发出。但这种方法并非绝对安全,因为Referer头可以被伪造或缺失。

通过这些防护措施,可以大大降低CSRF攻击成功的可能性,保护用户数据和操作的安全性。

 

在登录的视图函数中我们可以先学习一下设置COOIKE

 

这边有多种设置cookie过期时间的方式 可以挨个试一下

在用户登录后我们在识别他是否是登录状态,我们用cookie来识别

在登录的视图函数中我们可以先获取用户的cookie并返回用户信息

在首页页面的html中可以去做一下判断 如果有就显示登录成功 else 就返回登录页面

 如果需要增加注销功能

 我们可以看到点击注销按钮后 原本有的COOKIE就消失了

 

Session 测试

session的数据是存在服务器端

 删除session 的方式

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/606307
推荐阅读
相关标签
  

闽ICP备14008679号