Django学习笔记:cookies和session
Cookies:
信息在cookie里。
设置cookies

删除和获取cookies

其实删除cookies说通过把过期时间设置成0(立刻过期)来实现
Seesion
session有赖于cookies机制而存在的,不同于Cookes,session的信息在服务器内部
在django中说通过数据库存储。
cookie里存储的说seesionid,服务器拿到sessionid后解析后才能获取数据。
session在django项目中的配置:

session在django项目中的使用:
session在django中被封装成字典,使用起来非常简单,比cookies简单很多。

session的配置:

具体来说是放在了django_seession这个表里

及时浏览器清除了cookie(session)或者session过期,但是服务器的session还是存在,不会主动去删除,只有执行python3 manage.py clearsessions才能删除session的表中的过期数据内容。
利用中间件,django让session的操作变得十分简单,但是本文作为学习笔记,有必要去探究一下sessions实现,它是如何以来cookies进行工作的?
以登陆状态保持(注:由于我使用的是基于django的蓝鲸框架,sessionid名称为XXX_bk_sessionid)为例:
当django中通过request.session['username']='shanshan'的时候。
1.用户发送用户账号密码到服务器,服务器验证通过后,服务器会为该session生成一个sessionid:z60i0XXXX....XXXXjcogbf,在响应头里添加:Set-Cookie:sessionid=z60i0XXXX....XXXXjcogbf

2.服务器在session数据库(或者redis)里加入一条数据:z60i0XXXX....XXXXjcogbf(具体id编号),“username=shanshan”字符串的加密编码字符串(在登陆场景中session data一般是用户名或者用户id等个人内容),expire(过期时间),而后发送响应给客户端。

当django中通过request.session.get('username')的时候,通过以下步骤获取用户信息username:shanshan。
3.客户端的下次访问将会带上这个cookie(sessionid=z60i0XXXX....XXXXjcogbf),服务器端自动获取名为sessionid的cookie,取出key为sessionid的session,把session的值“z60i0XXXX....XXXXjcogbf”取出后在数据库(或者redis)中对比,得到用户个人信息username=“shanshan”,由django的session中间件get后返回程序。由此,服务器就知道当前服务的对象是谁并且知道服务对象的session没有过期,那么就不用返回登陆界面,直接返回用户请求的内容。

以上我们以登陆为场景,结合cookie机制来具体解释django对session的封装原理,至此,完成了对session和cookie对基础知识对学习。