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校验    注释中间件下,@csrf_protect加在视图函数上,其他都不校验,只这个
 

注意点:

from django.shortcuts import render, HttpResponse
from django.template.response import TemplateResponse
from django.views.decorators.csrf import csrf_exempt, csrf_protect
def index(request, pk):
print('index')
# print(id(request))
ret = HttpResponse('o98k') def xxx():
return HttpResponse('快开学了')
ret.render = xxx
ret.set_signed_cookie()
return ret # return TemplateResponse(request, 'index.html', {'index': '放假了'})
@csrf_exempt #除了
# @csrf_protect #保护
def home(request):
return render(request, 'home.html') from django.views import View
from django.utils.decorators import method_decorator #方法装饰器
class Home(View):
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
ret = super().dispatch(request, *args, **kwargs)
return ret
def get(self, request):
return render(request, 'home.html')
# @装饰器加在这里不行
def post(self, request):
return render(request, 'home.html')

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. 对比不成功,校验失败,拒绝

 

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

  1. cookie和session的那些事

    对于经常网购的朋友来说,经常会遇到一种情况: 打开淘宝或京东商城的首页,输入个人账号和密码进行登陆,然后进行购物,支付等操作都不需要用户再次输入用户名和密码 但是如果用户换一个浏览器或者等几个小时后再 ...

  2. cookie、session和token那些事

    cookie 和 session 众所周知,HTTP 是一个无状态协议,所以客户端每次发出请求时,下一次请求无法得知上一次请求所包含的状态数据,如何能把一个用户的状态数据关联起来呢? 比如在淘宝的某个 ...

  3. cookie和session django中间件

    目录 一.cookie和session 1. 为什么要有cookie和session 二.cookie 1. 什么是cookie 2. django中关于cookie的使用 (1)后端设置cookie ...

  4. Django进阶(路由系统、中间件、缓存、Cookie和Session、Ajax发送数据

    路由系统 1.每个路由规则对应一个view中的函数 url(r'^index/(\d*)', views.index), url(r'^manage/(?P<name>\w*)/(?P&l ...

  5. (day58)十、Cookie、Session、Token、Django中间件

    目录 一.Cookie (一)由来 (二)什么是Cookie (三)Django中操作Cookie (1)设置Cookie (2)获取Cookie (3)删除Cookie 二.Session (一)由 ...

  6. Django --- cookie与session,中间件

    目录 1.cookie与session 1.cookie 2.session 2.中间件 1.中间件作用 2.用户可以自定义的五个方法 3.自定义中间件 1.cookie与session 1.cook ...

  7. django 2 ORM操作 ORM进阶 cookie和session 中间件

    ORM操作 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...

  8. Django之cookie与session、中间件

    目录 cookie与session 为什么会有cookie和session cookie 设置cookie 获取cookie 删除cookie 实例:cookie版登录校验 session 设置ses ...

  9. cookie、session和中间件

    目录 cookie和session cookie与session原理 cookie Google浏览器查看cookie Django操作cookie 获取cookie 设置cookie 删除cooki ...

随机推荐

  1. SQL Server 2016 发送邮件功能

    --1 安装好SQL Server 2016 --2 安装.Net 3.5 由于SQL Server 2016 安装不提示强制安装.NET 3.5 但是还是需要安装,数据库发送邮件会使用.NET 3. ...

  2. os.path的使用

    os.path 1.返回当前目录 举个例子: (1)给出一个目录名称,返回绝对路径 project_path = "Exercise" path = os.path.dirname ...

  3. 并发编程---线程queue---进程池线程池---异部调用(回调机制)

    线程 队列:先进先出 堆栈:后进先出 优先级:数字越小优先级越大,越先输出 import queue q = queue.Queue(3) # 先进先出-->队列 q.put('first') ...

  4. Cartographer源码阅读(2):Node和MapBuilder对象

    上文提到特别注意map_builder_bridge_.AddTrajectory(x,x),查看其中的代码.两点: 首先是map_builder_.AddTrajectoryBuilder(...) ...

  5. vertical-align:middle实现图片与文字垂直居中对齐

    css代码: header .logo{ display:inline-block; margin-left: 10px; width: 15%; line-height: 9.1rem; backg ...

  6. python 根据字符串动态的生成变量名并且赋值

    Python 动态的创建变量 一.子符串的形式 这是在今天的一个项目中,发现需要动态的创建很多变量.每个变量对应的值的来源都相同.在网上看了些资料,研究出了这个动态创建变量的牛逼方法. 所用的方法就是 ...

  7. SmartGit 过期破解 - 授权文件 Free Trial License to Non-Commercial

    亲测可用~ Windows: %APPDATA%/syntevo/SmartGit/OS X:    ~/Library/Preferences/SmartGit/Unix/Linux:  ~/.sm ...

  8. 【漏洞公告】高危:Windows系统 SMB/RDP远程命令执行漏洞

    2017年4月14日,国外黑客组织Shadow Brokers发出了NSA方程式组织的机密文档,包含了多个Windows 远程漏洞利用工具,该工具包可以可以覆盖全球70%的Windows服务器,为了确 ...

  9. Python解决乱码问题

    解决python乱码问题 字符串在python的内部采用unicode的编码方式,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode ...

  10. 当我的url请求会变成jsp页面路径时的解决办法

    @RequestMapping(value="shippingOrder") $.post("/ezsh/orderAd/shippingOrder",para ...