1、CSRF
2、Cookie
-
Cookie:的由来:
因为HTTP请求没有状态,每一次请求都是独立的
-
Cookie是什么?
就是保存在浏览器上的键值对
服务端控制着响应,在响应里可以让浏览器在本地保存(键值对)Cookie
下一次请求在发送的时候就会自动携带这个Cookie值 -
Cookie应用
1、登陆,七天免登陆
2、记录用户的浏览习惯
3、简单的投票限制 -
Cookie是服务端设置的,我们浏览器可以不让服务端设置Cookie
-
Cookie默认关闭浏览器就失效
可将设置Cookie封装成装饰器(类似于以下写法)
from functools import wraps
def login_wraps(f):
@wraps(f)
def inner(request,*args,**kwargs):
ret = request
ret1 = f(request,*args,**kwargs)
if ret == '1':
return ret1
else:
return 0
return inner
@login_wraps
def func(request):
print(request)
return str(request) + 'k'
print(func('2'))
3、session
-
Session是什么?
是保存在服务端的键值对
Session必须依赖于Cookiegjhfgjhdfgd;{'is_login':1,'user':'li'} dfsfdhshhsd;{'is_login':1,'user':'long'}
-
存session具体做的事儿:
1、在服务端生成随机字符串
2、生成一个和上面随机字符串对应的大字典,用来保存用户数据
3、随机字符串当成cookie返回给浏览器 -
取session:
1、从请求携带的Cookie里面找到随机字符串
2、拿到随机字符串去session中找到对应大字典
3、从大字典中根据key取值 -
优缺点
优点:
存数据多、安全性高
缺点:
数据量大,占资源
python中cookie和session的使用方法
class Userinfo(views.View):
类的方法加装饰器
method_decorator('自己的装饰器')
def get(self,request):
ret = render(request,'test_test.html')
session请求
request.session['1'] = {'hame':1,'dd':2}
ret.set_signed_cookie('li','youxiu')
print(request.session.get('1')['dd'])
print(request.get_signed_cookie('li'))
return ret