cookie 和 session 的一些事 中间件

cookie 和 session

cookie

1. 保存在浏览器上一组组键值对,服务器让浏览器进行设置。
2. 为什么要用cookie?
   HTTP协议是无状态。使用cookie保存状态。
3. django中的操作
   设置:
       response.set_cookie(key,value,max_age=5)
       response.set_signed_cookie(key,value,max_age=5,salt=‘xxx‘)
   获取:
       request.COOKIES
       request.COOKIES[key]  request.COOKIES.get(key)
       request.get_signed_cookie(key,salt=‘xxx‘,default=‘‘)
   删除:
       response.delete_cookie(key)
   session
   1. 保存在服务器上一组组键值对,依赖于cookie
   2. 为什么要用session?
      1. cookie保存在浏览器上,不安全
      2. 长度大小收到限制
   3. django中的操作
      1. 设置
         request.session[key] = value
         request.session.setdefault(key,value)
      2. 获取
         request.session[key]
         request.session.get(key)
      3. 删除
         del request.session[key]
         request.session.delete()        # 删除当前回话的所有session数据,不删除cookie
         request.session.flush()          # 删除当前回话的所有session数据,删除cookie
      4. 其他
         request.session.clear_expired()   # 清除已过期的session
         request.session.set_expiry(value)   #设置过期时间  0时关闭浏览器就失效.
      5. 配置
             from django.conf import global_settings  #全局设置

django 中的中间件

django中的中间件是一个类,在全局范围内改变django的输入和输出

from django.utils.deprecation import MiddlewareMixin

五种方法:

process_request(self, request):

执行时间:在视图执行之前

执行顺序:按照 注册顺序 顺序 执行

返回值:

    None:正常流程

    HttpResponse对象:不执行下一个中间件中的process_request,不执行路由匹配,不执行视图,直接执行当前中间件的process_response方法。

process_response(self, request, response)

执行时间:在视图执行之后

执行顺序:按照注册顺序倒叙执行

返回值:

    HttpResponse对象

process_view(self, request, view_func, view_args, view_kwargs)

执行时间:在视图执行之前,路由匹配之后

执行顺序:按照注册顺序顺序执行

返回值:

    None:正常流程

    HttpResponse对象:不执行下一个中间件中的process_view,不执行视图,直接执行所有中间件中最后一个中间件的process_response方法。

process_exception(self, request, exception)

执行时间:视图层面报错时执行 

执行顺序:按照注册顺序倒序执行

返回值:

    None:交给下一个中间件处理异常

    HttpResponse对象:不执行下一个中间件中的process_exception,执行所有中间件中最后一个中间件的process_response方法。

process_template_response(self, request, response)

执行时间:返回的response对象是template_response,或者response对象有一个render的方法

执行顺序:按照注册顺序倒序执行

返回值:

    HttpResponse对象

csrf中间件

csrf 跨站请求伪造

django中跨站请求伪造的保护机制

装饰器

    from django.views.decorators.csrf import csrf_exempt,csrf_protect

csrf_exempt     加在视图上,表示当前视图不进行csrf校验

csrf_protect    加在视图上,表示当前视图进行csrf校验

注意点:

CBV情况,csrf_exempt装饰器要加在dispatch上

1. process_request(self, request):
   从cookie中获取csrftoken的值  —— 》 request.META[‘CSRF_COOKIE‘]
2. process_view:
   1. 判断视图是否加上csrf_exempt,
      1. 有就不在进行csrf校验
      2. 没有继续进行校验
   2. 判断请求方式是‘GET‘, ‘HEAD‘, ‘OPTIONS‘, ‘TRACE‘,
      1. 是的话,不进行校验
      2. 不是的话,进行校验
   3. 进行校验的:
      1.     csrf_token = request.META.get(‘CSRF_COOKIE‘)   #  csrf_token = cookie中获取csrftoken的值
      2.     先尝试从request.POST获取csrfmiddlewaretoken对应的值
             request_csrf_token = request.POST.get(‘csrfmiddlewaretoken‘, ‘‘)  # 获取隐藏标签的csrfmiddlewaretoken对应的值
             再尝试从请求头中获取X-csrftoken的值
             request_csrf_token = request.META.get(settings.CSRF_HEADER_NAME, ‘‘)
      3. 拿csrf_token和request_csrf_token 进行对比
         1. 对比成功,校验成功
         2. 对比不成功,校验失败,拒绝

原文地址:https://www.cnblogs.com/zhangchen-sx/p/10386183.html

时间: 2024-11-07 10:15:45

cookie 和 session 的一些事 中间件的相关文章

扒一扒Cookie和Session的那些事

首先,众所周知:cookie是客户端技术——cookie是把用户的数据写给用户的浏览器:session是服务端技术——session是把用户的数据写到用户独占的session中. 下面具体来扒一扒他们之间数据保存的区别: cookie保存用户数据的原理: Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器. 当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去.这样,web资源处理的就是用户各自的数据了. session保存用户数据的原理: S

cookie和session django中间件

目录 一.cookie和session 1. 为什么要有cookie和session 二.cookie 1. 什么是cookie 2. django中关于cookie的使用 (1)后端设置cookie (2)后端获取cookie (3)设置cookie的超时时间 (4)删除cookie 三.session 1. 什么是session 2. django中关于session的使用 (1) 设置session (2)获取session (3)设置失效时间 (4)删除session 四.token 五

Django进阶(路由系统、中间件、缓存、Cookie和Session

路由系统 1.每个路由规则对应一个view中的函数 url(r'^index/(\d*)', views.index), url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage), url(r'^manage/(?P<name>\w*)', views.manage,{'id':333}), 2.根据app对路由规则进行一次分类 rl(r'^web/',include('web.urls')), 1.每个路由规则对应

Cookie、session、中间件

正文 一  cookie 机制 Web应用程序是使用HTTP协议传输数据的.HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接.这就意味着服务器无法从连接上跟踪会话.即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了.Cookie可以弥补HTTP协议无状态的不足.在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话.cookie有如下特点: cookie是保

cookie和session那些事

cookie history cookie最初是由网景公司开发的,现在所有主要的浏览器都支持它. type cookie分为两种:会话cookie和持久cookie. 会话cookie是一种临时的cookie,它记录用户的访问站点的设置偏好.用户在退出浏览器就会被删除. 持久cookie是存储在硬盘上的,通常用持久cookie维护用户周期性访问的站点的配置文件或用户名. 会话cookie和持久cookie的区别在于有没有过期时间,没有过期时间就是会话cookie. cookie罐 cookie的

cookie、session和token

https://zhuanlan.zhihu.com/p/25495290?utm_source=wechat_session&utm_medium=social 一.cookie 众所周知,HTTP 是一个无状态协议,所以客户端每次发出请求时,下一次请求无法得知上一次请求所包含的状态数据,如何能把一个用户的状态数据关联起来呢? 1.首先产生了 cookie 这门技术来解决这个问题,cookie 是 http 协议的一部分,它的处理分为如下几步: 1 服务器向客户端发送 cookie. 2 通常

Python Django 多对多三种创建方式 form组件 cookie和session

一 表中多对多关系三种创建方式 以Book表和Author表多对多关系例 1.第一种方式:全自动(推荐使用):models.ManyToManyField(to='类名') 优点:不需要你手动创建第三张表 缺点:第三张表不是你手动创建的,字段是固定的无法拓展 class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8,decimal_place

多对多三种创建方式,forms组件,cookie和session

多对多三种创建方式 1.全自动 优点:不需要自己手动创建第三章表缺点:由于第三张表不是自己创建的,也就是说第三张表字段是固定的没有办法做扩展 class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8,decimal_places=2) authors = models.ManyToManyField(to='Author') class Au

Cookie与Session详解

来源:<PHP核心技术与最佳实践> 列旭松 陈文 著 Cookie与Session详解读书笔记,从概念.操作.应用.注意事项以及区别等几方面详细阐述两者的基础知识,它们都是针对HTTP协议的局限性而提出的一种保持客户端和服务器间保持会话连接状态的机制.. 一.Cookie详解 Cookie在远程浏览器端存储数据并以此跟踪和识别用户的机制.从实现上说,Cookie是存储在客户端上的一小段数据,浏览器(即客户端)通过HTTP协议和服务器端进行Cookie交互. Cooke独立于语言存在,严格地说,