1. Cookie 是什么
HTTP Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。
2. Cookie 的分类
Cookie总是保存在客户端中,按在客户端中的存储位置,内存 Cookie 和硬盘 Cookie。
按存在时间,可分为非持久Cookie和持久Cookie。
3. Cookie 的用途
因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。Cookie就是用来绕开HTTP的无状态性的“额外手段”之一。服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。
Cookie主要用于以下三个方面:
- a. 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
- b. 个性化设置(如用户自定义设置、主题等)
- c. 浏览器行为跟踪(如跟踪分析用户行为等)
4. Cookie 的缺陷
Cookie曾一度用于客户端数据的存储,因当时并没有其它合适的存储办法而作为唯一的存储手段,但现在随着现代浏览器开始支持各种各样的存储方式,Cookie渐渐被淘汰。由于服务器指定Cookie后,浏览器的每次请求都会携带Cookie数据,会带来额外的性能开销(尤其是在移动环境下)。新的浏览器API已经允许开发者直接将数据存储到本地,如使用 Web storage API (本地存储和会话存储)或 IndexedDB 。
- a. Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
- b. 由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题,除非用HTTPS。
- c. Cookie的大小限制在4KB左右,对于复杂的存储需求来说是不够用的。
5. Cookie 的使用(部分)
a. 创建 Cookie
服务器设置响应头,添加 Set-Cookie 选项,另外,Cookie的过期时间、域、路径、有效期、适用站点都可以根据需要来指定。
Set-Cookie: <cookie名>=<cookie值>
b. 设置cookie过期时间
i. setMaxAge
cookie.setMaxAge(0);//不记录cookie
cookie.setMaxAge(-1);//会话级cookie,关闭浏览器失效
cookie.setMaxAge(60*60);//过期时间为1小时
ii. 过时了的expires
Set-Cookie: name=Nicholas; expires=Sat, 02 May 2009 23:38:25 GMT
//星期六 5月2号 2009年 23:38:25时过期
Expires指的时间是本地时间,如果用户本地时间错乱就不行了
网友评论