目录:
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攻击
为啥在get和post中,get不需要防范:
因为get被认为是查询操作,查询的意思是,查看你所写的数据,不会对数据库产生影响。
昨日作业总结:
题目:
图书项目
1.创建django项目,项目名day3+姓名首拼,例如元宝,day3yb
2.创建django应用 books
3.创建用户模型类(包含用户名和密码)
4.创建数据模型类(包含书名,类型 和 价格)
5.编写注册视图代码,能将账号密码保存到数据库中,然后重定向到登录视图
6.编写登录视图代码,能判断账号密码是否正确,然后重定向到主视图
7.主视图展示内容(注册成功的用户有哪些,书籍信息有哪些(书籍信息自己通过控制台添加))
报错的点:
在数据库中创建的同名数据太多了匹配不到
数据库中的数据user过多:
pycharm中如果设置不了字符串类型就在判断密码的时候写一个str: