一、什么cookie?以及cookie的由来
故名思意,cookie就是我们曾今吃过的小饼干。但是我这里的cookie不是指库奇牌儿饼干,而是网络编程中的一门技术。
由于http协议是一种无状态保存的超文本传输协议,因此用户登录网站后,无法保存登录状态,需要携带用户信息去访问。
为了解决这个问题,就产生了cookie技术。
二、cookie的工作原理
用户登录xx官网,浏览器发送一个封装了名为cookie空字典的请求给服务器,服务器验证通过,
响应一个封装了名为cookie的字典的响应给浏览器,这个字典中包含了登录的用户名、密码和登录成功的状态码。
当用户再一次去访问这个xx官网时,浏览器发送一个携带这个名为cookie字典的request请求,
服务器收到这个请求验证,验证通过后直接响应登录成功的首页给浏览器。
三、session的由来
cookie的劣势:
1、由于cookie中登录状态和用户名密码是存放在浏览器中数据不安全。
2、cookie本身最大支持存储空间是4096字节
因此诞生了session技术,弥补cookie的缺陷。
四、session的工作原理
用户登录xx官网,浏览器发送一个封装了名为cookie的空字典的请求,服务器接收这个请求后,进行登录验证,验证成功后,随机生成一个字符串作为session-key的值存放在Django-session表中,并且将用户的用户名密码以键值对的形式作为session-data的值存储在Django-session表中。同时将这个随机生成的session-key的值赋值给cookie的字典中sessionid,存储在浏览器中。当第二次访问官网时,发请求时携带这个cookie,根据它的sessionid的值匹配,找到django-session表中session-data中的值,进行验证。然后返回一个登录成功的页面。这样就通过了session技术完成了一次无需登录的访问。
五、cookie与session的区别
1、数据存放的位置不同。cookie的数据是存在浏览器中,session的数据是存放在服务器中。
2、安全程度不同。相对而言,session更安全。
3、性能使用程度不同:session保存在服务器上,当访问增多,会比较占用服务器的资源,考虑到减轻服务器性能方面,应当使用cookie。
4、数据存储大小不同:单个cookie保存的数据不能超过4kb,大部分浏览器最多保存20个cookie,而session则存储在服务器的数据库中,基本不用考虑存储空间够不够的问题。
5、回话机制不同:session是一种服务端会话机制,它使用类似哈希表的结构来保存信息。
cookie是服务器存储在本地计算机上的小块文本。浏览器按照HTTP协议将cookie发送到服务端,浏览器解析服务端传输过来的cookie,并且将其保存在本地文件中。