1Cookie:
特点:1.是保存在客户端浏览器上的,2.是明问传递的
2.设置Cookie:
# 设置cookie
class Cookie(View):
def get(self,request):
#获取Cookie:
cookie_data = request.COOKIES.get('shenfen')
#判断Cookie是存在的
if cookie_data is not None:
#如果存在就渲染出set_cookie(key,value)方法中的键,就是已存在的状态
return HttpResponse(f"cookie信息已存在{cookie_data}")
else:
#如果不存在,就使用set_cookie(key,value)携带cookie返回
resp = HttpResponse("设置cookie")
resp.set_cookie('shenfen','huangjindashen')
return resp
3.删除Cookie:
# 删除cookie:
class Delete(View):
def get(self,request):
#获取Cookie:
cookie_data = request.COOKIES.get("shenfen")
if cookie_data is not None: #如果不为空就删除身份状态
resp = HttpResponse(f'删除cookie{cookie_data}')
resp.delete_cookie('shenfen') #删除
return resp #返回删除cookie这句话
else:
#如果为空,就直接返回不存在就行了
return HttpResponse('cookie不存在')
2.Session
session是另一种记录客户状态的机制,保存在服务器上
1.获取Session:
session_data = request.session.get(Key)
session_data = request.session[Key]
在`Session`中获取对应值,`get`方法获取时,如不存在该`Key`值,不会引发异常,返回`None`
而第二种直接通过get方法获取,如`Key`值不存在,引发`KeyErro`
2.删除Session方法:
1.del request.seesion[Key]
# 删除对应session,Key值不存在时,引发KeyError
2.request.session.clear()
# 清空Session中的所有数据。这里客户端还会保留sessionid;
# 只不过在服务端sessionid对应的数据没有了
3.request.session.flush()
# 直接删除当前客户端的的Seesion数据。这里不光服务端sessionid对应的数据没有了,客户端的`sessionid`也会被删除
3.设置Session:
class Session(View):
# 设置session
def get(self,request):
#获取session
session_data = request.session.get('money')
#判断不为空时就打印设置的数据的键
if session_data is not None:
return HttpResponse(f"session信息为:{session_data}")
else:
#为空时就设置session
request.session['money'] = 10000000
return HttpResponse("设置session")
4.删除session:
class Deletesession(View):
# 删除session
def get(self,request):
# 获取money:
session_data = request.session.get('money')
#如果不为空就可以用del方法删除
if session_data is not None:
del request.session['money']
return HttpResponse("seeion以删除")
else:
#如果为空就返回不存在
return HttpResponse("session不存在")
5.Session与Cookie的对比:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
3.Csrf
1. 什么是CSRF:
CSRF(Cross-site request forgery):跨站请求伪造。
2. 如何防止CSRF攻击:
讨论 GET 和 POST 两种请求,对于 GET,其实也没什么需要防范的。为什么?
因为 GET 在 “约定” 当中,被认为是查询操作,查询的意思就是,你查一次,查两次,无数次,结果都不会改变(用户得到的数据可能会变),这不会对数据库造成任何影响,所以不需要加其他额外的参数。
对于 POST,服务端在创建表单的时候可以加一个隐藏字段,也是通过某种加密算法得到的。在处理请求时,验证这个字段是否合法,如果合法就继续处理,否则就认为是恶意操作。
这个 html 片段由服务端生成。
这的确是一个很好的防范措施,再增加一些处理的话,还能防止表单重复提交。
可是对于一些新兴网站,很多都采用了 “前后端分离开发” 的设计,或者退一步,无论是不是前后端分离,它的 HTML 可能是由 JavaScript 拼接而成,并且表单也都是异步提交。所以这个办法有它的应用场景,也有局限性。