cookie是由服务器发送给客户端(浏览器)的小量信息。数据库
咱们知道,平时上网时都是使用无状态的HTTP协议传输出数据,这意味着客户端与服务端在数据传送完成后就会中断链接。这时咱们就须要一个一直保持会话链接的机制。在session出现前,cookie就彻底充当了这种角色。也就是,cookie的小量信息能帮助咱们跟踪会话。通常该信息记录用户身份。express
固然cookie也常记录跟踪购物车的商品信息(如数量)、记录用户访问次数等。json
cookie-parser 的做用就是设置,获取和删除 cookie。浏览器
var express = require('express'); //引入cookie-parser模块 var cookieParser = require("cookie-parser"); //建立express实例 var app = express(); // 设定监听端口 app.set('port', process.env.PORT || 3000); //建立cookie实例 app.use(cookieParser()); app.use("/login", function(req,res){ //获取cookie console.log(req.cookies); //设置cookie,关闭签名 res.cookie("user", {username: req.body.username}, {maxAge: 600000 , httpOnly: true, 'signed': false}); }); //监听3000端口 var server = app.listen(app.get('port'),function(){ console.log("建立成功!") });
var cookieParser = require('cookie-parser'); #引入模块 app.use(cookieParser()); #挂载中间件,能够理解为实例化
这两行代码默认在app.js
中写好了,表示如今能够直接使用 cookie 了。安全
res.cookie(name, value [, options]);
name 是 cookie 名,value 是 cookie 值,能够是 json 对象或字符串。options 是选项,经常使用选项有:服务器
{ 'maxAge': 90000, # 有效时长,即90000毫秒后过时,String 'signed': false # 默认为false,表示是否签名,Boolean }
建立 cookie 会在 http 响应头中添加Set-Cookie
,从而在浏览器中设置 cookiecookie
var cookies = req.cookies # 获取cookie集合 var value = req.cookies.key # 获取名称为key的cookie的值
res.clearCookie(name [, options])
name 是 cookie 名,options 与建立 cookie 时所传一致 session
上面所写 cookie 的各类操做,都是没有通过签名的。签名能够提升安全性。下面是使用签名生成 cookie 的方法,大同小异,修改上文便可:app
修改实例配置:ui
app.use(cookieParser('ruidoc')); # 须要传一个自定义字符串做为secret
修改建立cookie配置
# 建立cookie的options中,必填 signed: true res.cookie(name, value, { 'signed': true });
修改获取cookie方式:
var cookies = req.signedCookies # 获取cookie集合 var value = req.signedCookies.key # 获取名称为key的cookie的值
方案1:
直接把用户名与密码都保持到Cookie中,下次访问时检查Cookie中的用户名与密码,与数据库比较。这是一种比较危险的选择,通常不把密码等重要信息保存到Cookie中。
方案2:
把密码加密后保存到Cookie中,下次访问时解密并与数据库比较。这种方案略微安全一些。若是不但愿保存密码,还能够把登陆的时间戳保存到Cookie与数据库中,到时只验证用户名与登陆时间戳就能够了。
方案3:
实现方式是把帐号按照必定的规则(密钥)加密后,连同帐号一块保存到Cookie中。下次访问时只须要判断帐号的加密规则是否相同便可。