Django中使用cookie和session
Django中使用cookie与session
一、cookie
cookie的由来:由于HTTP协议是无状态的,每次请求都是独立的请求,为了能够保存某些数据,cookie便产生了。
什么是cookie:cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对。下次访问服务器的时候,浏览器会自动携带这些键值对,以便服务器提取有用数据。
cookie的原理:cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问服务器时,会自动携带cookie,这样服务器就能够通过cookie的内容判断是'谁'来访问了。
Django中使用cookie
设置cookie:
# views.py
res = HttpResponse('...')
# 普通cookie
res.set_cookie(key, value, ...)
# 加盐cookie
res.set_signed_cookie(key, value, salt='加密盐', max_age=None, ...)
获取cookie:
# views.py
def index(request):
# 获取普通cookie
request.COOKIE['key']
# 获取加盐的cookie
request.get_signed_cookie(key, salt='加密盐', default=None)
删除cookie:
# views.py
def logout(request):
res = redirect('/login/')
res.delete_cookie('key')
return res
二、session
session的由来:cookie虽然在一定程度上解决了保存状态的需求,但是由于cookie本身最大支持4096字节,以及cookie本身存储在浏览器上并不安全(可能被拦截或窃取)。因此需要有一种新的东西,它能支持更多的字节,并且保存在服务器,有较高的安全性。也就是session。
然而基于HTTP协议的无状态特征,服务器根本不知道访问者是’谁‘,为了解决这个问题cookie就起了作用。
我们可以给每个客户端的cookie分配一个唯一的id,这样用户在访问时,通过cookie,服务器就知道访问者是’谁‘了。然后我们再根据不同的cookie的id,在服务器上保存一段时间的私密信息(如账号,密码等)。
总结而言:cookie弥补了HTTP无状态的不足,让服务器知道访问的人是'谁';但是cookie以文本的形式保存在本地,自身安全性较差;所以我们就通过cookie识别不同的用户,对应的在session里保存私密的信息以及超过4096字节的文本。
Django种session的相关方法
# 获取session
def index(request):
request.session.get('k1')
"""
1.浏览器发送cookie到Django后端之后,Django会自动获取到cookie值
2.拿着随机字符串去django_session表中比对 是否有对应的数据
3.如果比对上了,就将随机字符串所对应的数据取出赋值给request.session
如果对不上,那么request.session就是个空
"""
# django_session表是针对浏览器的 不同的浏览器来才会有不同的记录
# 设置session
def index(request):
request.session['k1'] = 123 # 仅仅只会在内存产生一个缓存
request.session.setdefault('k1', 123) # 存在则不设置
"""
1.Django内部自动生成随机的字符串
2.在django_session表中存入数据
3.将产生的随机字符串发送给浏览器,让浏览器保存到cookie中
"""
# 删除sessiona
def index(request):
request.session.delete() # 只删除服务端的session
request.session.flush() # 浏览器和服务端的session全部删除