1、Cookie 简介
● cookie 是存储于访问者的计算机中的变量。可让咱们用同一个浏览器访问同一个域
名的时候共享数据。
● HTTP 是无状态协议。简单地说,当你浏览了一个页面,而后转到同一个网站的另外一个页
面,服务器没法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何
关系的。
● Cookie 是一个简单到爆的想法:当访问一个页面的时候,服务器在下行 HTTP 报文中,
命令浏览器存储一个字符串; 浏览器再访问同一个域的时候,将把这个字符串携带到上行
HTTP 请求中。第一次访问一个服务器,不可能携带 cookie。 必须是服务器获得此次请求,
在下行响应报头中,携带 cookie 信息,此后每一次浏览器往这个服务器发出的请求,都会
携带这个 cookie。npm
2、Cookie 特色
● cookie 保存在浏览器本地
● 正常设置的 cookie 是不加密的,用户能够自由看到;
● 用户能够删除 cookie,或者禁用它
● cookie 能够被篡改
● cookie 能够用于攻击
● cookie 存储量很小。将来实际上要被 localStorage 替代,可是后者 IE9 兼容。浏览器
3、Cookie 的使用
1.安装 cnpm instlal cookie-parser --save
2.引入 var cookieParser = require('cookie-parser');
3.设置中间件
app.use(cookieParser());
4.设置 cookie
res.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});
//HttpOnly 默认 false 不容许 客户端脚本访问
5.获取 cookie
req.cookies.name服务器
属性说明:
domain: 域名
name=value:键值对,能够设置要保存的 Key/Value,注意这里的 name 不能和其余属性项的名字
同样cookie
Expires: 过时时间(秒),在设置的某个时间点后该 Cookie 就会失效,如 expires=Wednesday,
09-Nov-99 23:12:40 GMTapp
maxAge: 最大失效时间(毫秒),设置在多少后失效dom
secure: 当 secure 值为 true 时,cookie 在 HTTP 中是无效,在 HTTPS 中才有效网站
Path: 表示 cookie 影响到的路,如 path=/。若是路径不能匹配时,浏览器则不发送这个 Cookie
httpOnly:是微软对 COOKIE 作的扩展。若是在 COOKIE 中设置了“httpOnly”属性,则经过程序(JS
脚本、applet 等)将没法读取到 COOKIE 信息,防止 XSS 攻击产生ui
singed:表示是否签名 cookie, 设为 true 会对这个 cookie 签名,这样就须要用
res.signedCookies 而不是 res.cookies 访问它。被篡改的签名 cookie 会被服务器拒绝,而且 cookie
值会重置为它的原始值
设置 cookie
res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })
res.cookie('name', 'tobi', { domain: '.example.com', path: '/admin', secure: true });
res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly:
true });加密
获取 cookie
req.cookies.name
删除 cookie
res.cookie('rememberme', '', { expires: new Date(0)});
res.cookie('username','zhangsan',{domain:'.ccc.com',maxAge:0,httpOnly:true});spa
4、加密 Cookie
1.配置中间件的时候须要传参
var cookieParser = require('cookie-parser');
app.use(cookieParser('123456'));
2.设置 cookie 的时候配置 signed 属性
res.cookie('userinfo','hahaha',{domain:'.ccc.com',maxAge:900000,httpOnly:true,signed:true});
3. signedCookies 调用设置的 cookieconsole.log(req.signedCookies);