这两天在学习Cookie的相关知识,这里做一个简单的学习笔记,方便今后回看。
Cookie的含义
Cookie 英文翻译过来的意思是 “小甜饼”,但是这里介绍的是HTTP Cookie。它是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器。
Cookie的用途
因为HTTP协议是无状态的(服务器不知道用户上一次做了什么),这严重阻碍了交互式Web应用程序的实现,Cookie使得基于无状态的HTTP协议记录稳定的状态信息成为了可能。
Cookie的典型用途——网购
在网上购物的时候,用户将商品A和商品B加入了购物车,在最后结账的时候,由于HTTP是无状态的,不通过额外的手段,服务器不知道用户购买了那些商品。服务器通过设置或者读取Cookie中包含的信息,借此就能和用户之间保持对话的关系。当用户选择商品A之后,这时服务器端就会向浏览器端发送页面请求的时候,还发送一段Cookie,记录着这件商品的信息,当用户跳转到另一个商品的选购上时,浏览器会将这个Cookie发送给服务器,于是服务器就知道了用户之前选购了什么,当用户选择商品B之后,服务器就在原来只有商品A的Cookie上追加商品B的信息,就这样用户就可以一直向购物车中添加不同的商品,这样当用户在最后结账的时候通过Cookie的记录,之前所有已经加入购物车的商品的信息都会发到服务器上。
Cookie的典型用途——登录一个网站
当用户登录一个网站的时候,网站往往会请求用户输入账户名和密码,并且用户可以勾选“下次自动登录”。如果勾选了,那么用户下次访问同一个网站的时候,用户可以不输入用户名和密码就可以自动登录,这正是因为前一次登录时,服务器发送了包含登录凭据(用户名加密码的某种加密形式)的Cookie到用户的硬盘上。第二次登录时,如果该Cookie尚未到期,浏览器会发送该Cookie,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。
Cookie的分类
Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。
内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。
Cookie的缺陷
1、Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
2、由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题。
3、Cookie的大小限制在4KB左右,对于复杂的存储需求来说是不够用的。
注意
如果在一台计算机中安装多个浏览器,每个浏览器都会以独立的空间存放Cookie。因为Cookie中不但可以确认用户信息,还能包含计算机和浏览器的信息。
创建Cookie
当服务器收到HTTP请求的时候,服务器可以再响应头里面添加一个Set-Cookie选项。浏览器收到响应之后通常会保存下Cookie,之后对该服务器每一次请求的头部中都通过Cookie请求头部将Cookie信息发送给服务器。
服务器使用Set-Cookie响应头部向浏览器发送Cookie信息,一个简单的Cookie:
Set-Cookie: <cookie名>=<cookie值>
服务器通过该头部告知客户端保存Cookie信息。
下面是一个Node.js的实现例子:
response.setHeader('Set-Cookie',`sign_in_email=1@qq.com`)
那么浏览器中得到的结果就是
参考:
网友评论