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全部删除

posted @ 2019-10-30 17:13  17vv  阅读(203)  评论(0编辑  收藏  举报