day5保持状态(cookie,session,csrf)

目录:

1.Session的用法
2.Session与Cookie的区别
3.CSRE攻击的解决方法

cookie逻辑图:

客户端—>(第一次登录)服务器–>生成cookie信息–>返回cookie信息(响应)–>客户端(保存cookie信息)–>发送cookie请求–>服务器–>对cookie进行辨别–>返回响应–>客户端
请添加图片描述

5.1Cookie介绍

5.1.1HTTP短连接的解惑

短链接:没有记录功能,每次访问都需要重新拉联系
长链接:不会立马断开连接,有一定的缓冲时间
HTTP/1.0默认使用短连接
HTTP/1.1默认使用长连接

5.1.2状态保持的秘密

Cokie与Session从开始到今在WEB上都是非常关键和重要的,并且通过Response的响应给客户端。当下一次访问的服务端的时候,就会将这个Cookie值连带发送到服务端

5.1.3啥是Cookie

理解:服务端会为客户端生成一个Cookie键值对数据,Cookie的值存储在浏览器下,是明文传递的纯明文字符串

5.1.4Cookie的操作

步骤:

设置COOKIE和获取

配置路由

#cookie路由
path(‘cookie/’,views.CookeView.as_view()),

from django.http import HttpResponse
from django.shortcuts import render,redirect

class CookeView(View):
    # 如果没有cookie的话设置cookie,如果有的话,展示当前的cookie
    def get(self,request):
        cookie_data=request.COOKIES.get('shenfen')
        if cookie_data is None:
            # 如果信息不存在设置cookie
            resp=HttpResponse('设置cookie')
            resp.set_cookie('shenfen','kejindalao')
            return resp
        else:
            return HttpResponse(f'当前信息为{cookie_data}')

删除Cookie

配置路由

#删除cookie路由path(‘delcookie/’,views.DelCookieView.as_view())

from django.http import HttpResponse
from django.shortcuts import render,redirect

class DelCookieView(View):
    def get(self,request):
        resp=HttpResponse('删除cookie信息')
        resp.delete_cookie('shenfen')
        return resp
防止串改

set_signed_cookie函数进行持有签名的COOKIE值设置,避免用户在客户端进行修改
注:函数不是对COOKIE值进行加密

5.2Session

Session的原理

完善Cookie:Cookie之后,把信息存储在客户端浏览器上,可以用保持状态,但是就算这样也不太安全,例如:Cookie暴露和篡改等,用Session就可以解决这个问题
Session的特点:简称会话,用于存储用户以及对信息的配置的属性。当在web服务中跳转,数据不会丢失。

5.2.2框架是如何存储管理Session

获取Session

session_data=request.session.get(‘money’)
request.session[‘money’]=‘10000’

** views下定义类 **

class SessionView(View):
    def get(self,request):
        session_data=request.session.get('money')
        if session_data is None:
            request.session['money']='10000'
            return HttpResponse('设置ssession')
        else:
            return HttpResponse(f'信息为:{session_data}')

配置路由

    # 获取session数据
    path('session/',views.SessionView.as_view()),

页面显示(进去)
请添加图片描述
刷新后
请添加图片描述

删除Session

class DelSessionView(View):
    def get(self,request):
        if request.session.get('money') is None:
            return HttpResponse('session不存在')
        else:
            del request.session['money']
            return HttpResponse('session已删除')

引用路由

    # 删除session数据
    path('delsession/',views.DelSessionView.as_view())

页面的显示
进入路由之后请添加图片描述
刷新后请添加图片描述

5.3 Csrf

5.3.1什么是CSRF

CSRF:跨站请求伪造

5.3.2CSRF攻击模式的实现

流程的实现:
请添加图片描述

如何防止CSRF攻击

为啥在getpost中,get不需要防范:
因为get被认为是查询操作,查询的意思是,查看你所写的数据,不会对数据库产生影响。

昨日作业总结:
题目:

图书项目
1.创建django项目,项目名day3+姓名首拼,例如元宝,day3yb
2.创建django应用 books
3.创建用户模型类(包含用户名和密码)
4.创建数据模型类(包含书名,类型 和 价格)
5.编写注册视图代码,能将账号密码保存到数据库中,然后重定向到登录视图
6.编写登录视图代码,能判断账号密码是否正确,然后重定向到主视图
7.主视图展示内容(注册成功的用户有哪些,书籍信息有哪些(书籍信息自己通过控制台添加))

报错的点:
在数据库中创建的同名数据太多了匹配不到
请添加图片描述
数据库中的数据user过多:
请添加图片描述
pycharm中如果设置不了字符串类型就在判断密码的时候写一个str:
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值