Django Cookies 和 Session 小结
前言:HTTP被设计为”无状态”,在一次请求和下一次请求之间没有任何状态保持,服务器无法识别来自同一客户端的连续请求。因此,Cookies和Session应运而生。
1、Cookies
Cookies由Web服务器产生,是Web服务器发送给客户端的一小段信息。客户端会将这段信息保存在本地某个目录下的文件内。当客户端再次发送请求时,可以发送该信息到服务器端,这样服务器端就知道该客户端早前访问过我。就相当于街头暗号,我告诉你一个暗号,再次见面时你一说暗号,我就知道是你。cookie的应用之一是判断用户是否已经登录。
django中,写cookies,可以使用set_cookie()方法,有点像往字典里添加key-value
读cookies,request.COOKIES就像一个字典,我们可以通过key得到value,就像下面这样:
Cookies的缺点在于,不可靠和不安全。
- 首先,浏览器不一定要保存cookies,用户可以通过设置选择是否保存cookie。
- 另外,cookie是有生命周期的(通过Expire设置),如果超过周期,cookie就会被清除。
- 最后,HTTP数据通过明文发送,容易受到攻击,因此不能在Cookies中存放敏感信息。
2、Session
session 又叫做“会话”,用于存取会话信息, 这些数据在服务器端存储,并对cookie的收发进行了抽象。 Cookies只存储数据的哈希会话ID,而不是数据本身,从而避免了大部分的常见cookie问题。
Session工作的流程如下:
- 客户端向服务器发送请求时,看本地是否有cookie文件。如果有,就在HTTP的请求头(Request Headers)中,包含一行cookie信息。
- 服务器接收到请求后,根据cookie信息,得到sessionId,根据sessionId找到对应的session,用这个session就能判断出用户是否登录等等。如果session超时被销毁了,那么服务器会生成新的sessionId发回给客户端。客户端收到新的sessionId后,更新本地cookie文件中的信息,下次访问时就会使用新的cookie信息。
在Django中,Session功能通过中间件SessionMiddleware来实现。在使用过程中,可以像使用字典一样使用它。request.session["password"] = "asdf"
Session的另外一种使用方式是:像Model一样使用它,比如
使用Session的好处在于,即使用户关闭了浏览器,session仍将保持到会话过期。
Cookies与Session常用于用户的登录与退出,在这一方面,Django为我们提供了更方便的API:User对象,这里不过多讨论。
本文参考了django book,留作学习参考之用~