Cookie
HTTP是无状态的,这样做虽然简化了服务器的设计,但在实际工作中,一些万维网站点却常常希望能够识别用户;
例如,在网上购物时,一个顾客要购买多种物品;当他把选好的一件物品放入“购物车”后,他还要继续浏览和选购其他物品;因此,服务器需要记住用户的身份,使他接着选购的一些物品能够放入同一个“购物车”中,这样就便于集中结账;
有时某些万维网站点也可能想限制某些用户的访问;要做到这点,可以在HTTP中使用Cookie,现在很多网站都已广泛使用Cookie;
在RFC 6265中对Cookie进行了定义,规定万维网站点可以使用Cookie来跟踪用户,Cookie原意是“小甜饼”(广东人用方言音译为“曲奇”),目前尚无标准译名,在这里Cookie表示在HTTP服务器和客户之间传递的状态信息;
当 web 服务器向浏览器发送 web 页面时,连接关闭后,服务端不会记录用户的信息,而Cookie 的作用就是用于解决 "如何记录客户端的用户信息",是客户端用来存储数据的一种选项,但是它既可以在客户端设置也可以在服务器端设置;cookie会跟随任意HTTP请求一起发送;
实际上Cookie 其实就是存储在你电脑上的文本文件,主要存储了对应 web 页面的用户信息;
Cookie 的数据以键值对形式存储,如下所示:
username=John Doe
主要有以下键值对:
属性 | 解释 |
NAME=VALUE | 赋予Cookie的名称和其值(必需项) |
VALUE=识别码 |
|
expires =DATE | 设置cookie的失效日期,设置GMT格式的日期(new Date().toGMTString()); 如果设置一个过去的时间,这个cookie会被立即删除; 若不指定则默认为浏览器关闭为止; |
domin=域名 | 控制 cookie对「哪个域」有效(若不指定则默认为创建cookie的服务器域名),可以包含子域也可以不包含; 例如,可以是".google.com.hk"(不包含子域,表示它对google.com.hk的所有子域都有效),也可以是"www.google.com.hk"(包含子域)。 |
path=PATH | 控制cookie发送的指定域的「路径」,默认为"/",表示指定域下的所有路径都能访问;它是在域名的基础下,指定可以访问Cookie的路径; 例如: cookie设置为"domain=.google.com.hk; path=/webhp",那么只有".google.com.hk/webhp"及"/webhp"下的任一子目录如"/webhp/aaa"或"/webhp/bbb"会发送cookie信息,而".google.com.hk"就不会发送,即使它们来自同一个域; |
Secure(boolean) | 指定后,cookie只有在使用SSL连接(如HTTPS请求)时才会发送到服务器; 注意:只有保证网页是https协议(或其他安全协议)请求的,才能在客户端通过 js 去设置secure 类型的 cookie; |
HttpOnly(boolean) | 服务器端设置 httponly 后,存于浏览器的cookie只能由服务器端读取,前端不能通过document.cookie读取,主要目的是为了防止跨站脚本攻击,可以减轻xss(Cross Site Scripting)攻击的危害;前端无法设置httponly; |
max-age | 新的http协议使用max-age代替expires,它表示cookie的生存时长,单位为秒; 若 max-age 为负值,则cookie将在浏览器会话结束后失效,即 session; max-age的默认值为-1,若 max-age 为0,则表示删除cookie; 但在chrome测试,设置为负值会直接删除该cookie,设置为session才会在浏览器会话结束后失效; |
sameSite | 用来防止CSRF攻击和用户追踪; |
Postman 查看知乎的 cookie
cookie存储的地方,清理缓存到底是清理什么?
浏览器清理缓存主要就是清理cookie,抹去自己登陆痕迹以及浏览器中的资源缓存,重新请求网站资源