咱们知道http协议是无状态的,服务器端没法判断用户的状态,那么咱们须要有一种方式告诉服务端当前请求的用户是谁,这种方式就是cookie;有了cookie以后服务端能够知道当前请求用户的状态。本文主要介绍cookie的基础,下一节将深刻介绍cookie的使用。javascript
HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。固然,要不要发送cookie实际上是开发者能够控制的。后面我会经过demo给你们展现cookie的使用方式。html
知道了cookie其实就是存在浏览器端的一小块数据,那么它有什么做用呢?能够想象一个场景:当你浏览购物网站的时候,看中了一件商品,而后加入了购物车,这时你忽然有事须要外出,而后你关闭了电脑;等你回来以后想起来你还有东西要买,而后你打开电脑,打开购物网站,打开购物车,发现商品还在。那服务端怎么知道仍是你这我的浏览的网站呢?其实这就是cookie的一个做用,能够记录用户的登陆状态和用户的一些信息。
固然,cookie还能够用在其余的方面:java
cookie的设置有两种方式,一种是经过Document.cookie设置,另外一种是经过服务端设置;
(1)js操做
经过js设置cookie的方式很简单:浏览器
document.cookie = 'my_token=abc';
复制代码
这样就在浏览器中设置了一个name为my_token的cookie了; 也能够经过这个方式获取cookie:安全
let cookies = document.cookie;
console.log(cookies); // "my_token=abc"
复制代码
(2)服务端设置
服务端在响应请求的时候,header中设置set-cookie就能够设置cookie了:服务器
// 设置cookie,注意一点:set-cookie要在writeHead以前,不然会报错,也就是须要在响应客户端以前设置
response.setHeader('Set-Cookie', ['server_cookie=aaa']);
response.writeHead(200, {
'Content-Type': 'text/html'
});
复制代码
浏览器在发出一个请求以后默认的会把cookie放在请求头中发送到服务端:markdown
这就是为何cookie中不要设置太多的数据的缘由。cookie
既然cookie能够记录用户的登陆状态,那么它的安全是不容忽视的。
有两种方法能够确保 Cookie 被安全发送,而且不会被意外的参与者或脚本访问:Secure 属性和HttpOnly 属性。
Secure并发
标记为 Secure 的 Cookie 只应经过被 HTTPS 协议加密过的请求发送给服务端,所以能够预防 man-in-the-middle 攻击者的攻击。但即使设置了 Secure 标记,敏感信息也不该该经过 Cookie 传输,由于 Cookie 有其固有的不安全性,Secure 标记也没法提供确实的安全保障, 例如,能够访问客户端硬盘的人能够读取它。网站
HttpOnly
JavaScript Document.cookie API 没法访问带有 HttpOnly 属性的cookie;此类 Cookie 仅做用于服务器。例如,持久化服务器端会话的 Cookie 不须要对 JavaScript 可用,而应具备 HttpOnly 属性。此预防措施有助于缓解跨站点脚本(XSS)攻击。
以上介绍了cookie的定义、cookie的基本设置,很是简单,可是cookie在使用的时候并非那么简单的,下一篇文章会详细介绍cookie的设置、cookie的安全、cookie的其余属性。