django 里的session 和cookie

这几天从新系统学习Django 学到了 session 和 cookie , 第一次学的时候就没有很明白这两个概念,今天学的时候感受学明白了,因而就打算记下来。python

首先先讲一下cookie, 能够这么理解,cookie 的存在致使了session的存在,能够没有session,可是不能没有cookie,可见cookie的重要。mysql

cookie按照我本身的话说,就是浏览器给服务器看的一张id,一张身份证,这张ID卡上记载着客户端的信息,好比说用户名啥之类的,在客户端发送请求给到服务器的时候,同时将这张ID卡拿给服务器看,服务器看了就知道你是谁了,就能够进行一些后续的操做。固然,若是你是第一次访问这个服务器,你固然不会有cookie这个ID卡,此时当你发送请求,服务器发现你的head里面没有cookie,就知道你是第一次来,就会给你发一张ID卡,也就是帮你配置一个cookie,而后和你请求的数据一块儿返回回去,给到你的客户端,也就是浏览器,当你的浏览器打开页面的时候,同时也将cookie存到了你浏览器里面。固然,若是你的电脑里有多个浏览器,那么这些浏览器里的cookie并非相通的。redis

也许有人会说了,服务器看到你的ID卡怎么就能肯定这必定没毛病呢?也许是你本身伪造出来的,对的,因此session在这个时候就起做用了。当你第一次访问服务器的时候,服务器会给你的ID卡上加上sessionid,同时在服务器的内存里存储一些信息,而用来标记的就是sessionid。sql

若是有去过健身房的经历,就知道去的时候,你会把健身卡拿给前台,前台刷一下卡,而后就能够进去健身了。这就跟cookie 和 session 差很少,你去访问服务器,cookie里面带着sessionid, 服务器拿到sessionid,而后进数据库找一下你的信息,而后再返回相应的页面回去,其实很是好理解。数据库

下面来写一下Django里有关session 和cookie的具体代码:django

1.设置cookie

能够经过HttpResponse对象中的set_cookie方法来设置cookie。有效期的时间单位是秒,由于要把cookie经过将cookie设置在应答头里,因而对象就是HttpResponse。浏览器

HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)
复制代码
def cookie(request):
    response = HttpResponse('ok')
    response.set_cookie('message1', 'python1')  # 临时cookie
    response.set_cookie('message2', 'python2', max_age=3600)  # 有效期一小时
    return response
复制代码

2 读取Cookie

能够经过HttpResponse对象的COOKIES属性来读取本次请求携带的cookie值。request.COOKIES为字典类型。cookie 和session 都是经过字典来保存数据的。因为cookie是存储在请求头里,因此能够在request里面拿到cookie的数据。缓存

def cookie(request):
    cookie1 = request.COOKIES.get('message1')
    print(cookie1)
    return HttpResponse('OK')
复制代码

3 删除Cookie

能够经过HttpResponse对象中的delete_cookie方法来删除。有时候用户经过某些操做修改或删除了某些信息,就能够经过delete_cookie方法删除。服务器

response.delete_cookie('message2')
复制代码

cookie的操做差很少就这样了,接下来的是session的操做:cookie

1 存储方式

session有不少中储存方式,能够存在数据库,也能够存在内存里面,因此固然能够用mysql或者redis来存数据。在settings.py文件中,能够设置session数据的存储方式,能够保存在数据库、本地缓存等。

1.1 数据库

存储在数据库中,以下设置能够写,也能够不写,这是默认存储方式

SESSION_ENGINE='django.contrib.sessions.backends.db'
复制代码

若是存储在数据库中,须要在项INSTALLED_APPS中安装Session应用。加一行'django.contrib.sessions'就ok

而数据库里的session包括了三个重要数据:键,值,过时时间。

1.2 本地缓存

存在内存里面,读取速度快却是快,可是数据一旦丢失就凉凉,在setting.py里这么写:

SESSION_ENGINE='django.contrib.sessions.backends.cache'
复制代码

1.3 混合存储

优先从内存中取,找不到就从数据库里取

2 Session操做

固然还能够设置数据库为mysql 和 redis 这里网上都有资料。接下来写一点重要的session操做:

和cookie很像,写session也是经过键值对写的,取的时候也是同样

request.session['键']=值
request.session.get('键',默认值)
复制代码

清除全部session,在存储中删除值部分。

request.session.clear()
复制代码

清除session数据,在存储中删除session的整条数据。

request.session.flush()
复制代码

删除session中的指定键及值,在存储中只删除某个键及对应的值。

del request.session['键']
复制代码

设置session的有效期

request.session.set_expiry(value)
复制代码

差很少cookie和session的基本的知识就总结的差很少了,其实理解过程就是取健身房办卡的一个过程,而代码部分也挺好理解,无非就是在请求头和相应头里面加数据或者删数据,并且都是以键值对的形式储存,因此仍是不难的。

日拱一卒,功不唐捐。

相关文章
相关标签/搜索