cookie-parser
官网:https://github.com/expressjs/cookie-parser
一、概念: cookie ==> 小甜饼 , parser ==> 解析器, cookie-parser 就是用来解析 cookie 的.
二、cookie存储位置:cookie是存储在客户端浏览器中.每个浏览器的 cookie 都是独立的, 不能共享.
cookie 其实就是请求头中的一个数据.
作用: 方便向服务器发送数据,当服务器向客户端在响应头写入cookie,下一次发送请求会把cookie跟请求头一起发送给服务器。
(所以如果没有cookie-parser包,我们也可以通过req.headers在请求头中获取cookie)
cookie使用场景:通常用于服务器通过cookie识别用户的身份。
请求头: GET /admin HTTP/1.1 Host: localhost User-agent: firefox chrome ie iphone ios andoid referer: localhost/login
content-type: text/htm;charset==utf-8
cookie: name=admin .......
三、使用:
1.安装 cnpm install cookie-parser --save
2. 引入并设置:
var cookieParser = require('cookie-parser');
app.use(cookieParser());
2.1 设置cookie :
res.cookie('name','xiaohigh')
res.cookie('name','xiaohigh', {maxAge: 600000})
★ `res.cookie('name','xiaohigh')` 如果不设置 cookie 的生命周期, 则cookie 会随着浏览器的关闭而过期.
res.cookie('haha', 'name1=value1&name2=value2', {maxAge:10*1000, path:'/', httpOnly:true });
- name=value:键值对,可以设置要保存的 Key/Value,注意这里的 name 不能和其他属性项的名字一样
- Expires: 过期时间(秒),在设置的某个时间点后该 Cookie 就会失效,如 expires=Wednesday, 09-Nov-99 23:12:40 GMT
- maxAge: 最大失效时间(毫秒),设置在多少后失效
- secure: 当 secure 值为 true 时,cookie 在 HTTP 中是无效,在 HTTPS 中才有效
- Path: 表示 cookie 影响到的路,如 path=/。如果路径不能匹配时,浏览器则不发送这个Cookie
- httpOnly:是微软对COOKIE做的扩展。如果在COOKIE中设置了“httpOnly”属性,则通过程序(JS脚本、applet等)将无法读取到COOKIE信息,防止XSS攻击产生
2.2 读取cookie : req.cookies.name
2.3 清除cookie : res.clearCookie('name')
四、实例链接栗子
1.设置cookie
var express=require('express'); var app=express(); var cookieParser=require('cookie-parser'); app.use(cookieParser()); app.get('/setCookie',function(req,res){ res.cookie('name','slig'); res.end('ok'); }); app.listen(80);
第一次请求:响应头中 set-Cookie:name=slig;path=/ 此时已把cookie写入浏览器客户端。 请求头中没有cookie
第二次请求(再次刷新页面):响应头中 set-Cookie:name=slig;path=/ ; 请求头中有上一次的cookie: Cookie:name=slig
2.获取cookie、清除cookie

var express = require('express'); var app = express(); //引入cookie-parser var cookieParser = require('cookie-parser'); //设置 app.use(cookieParser()); //模板 app.set('view engine', 'ejs'); app.set('views','views'); //路由 app.get('/setCookie', function(req,res){ //写入cookie res.cookie('name','slig');//响应头中 res.end('ok'); }); //获取cookie app.get('/getCookie', function(req,res){ //获取 console.log(req.cookies.name); res.end('获取cookie') }); //删除cookie app.get('/delCookie', function(req, res){ res.clearCookie('name'); res.end('clear cookie'); }); // app.listen(8080);
3. 模拟服务器通过cookie识别用户的身份栗子:
模拟需求: // 没有登陆可以访问 // /home 首页 /list 列表页 // 必须之后之后才可以访问 // /admin 个人中心页 // 登陆页面 // GET /login // 实现登陆 admin admin 为后台管理员账号密码 // POST /login

var express = require('express'); var app = express(); //引入cookie-parser var cookieParser = require('cookie-parser'); var formidable = require('formidable'); //设置 app.use(cookieParser()); //模板 app.set('view engine', 'ejs'); app.set('views','views'); // 没有登陆可以访问 // /home /list // 必须之后之后才可以访问 // /admin // 登陆页面 // GET /login // 实现登陆 (账号:admin 密码:admin) 为后台管理员账号密码 // //检测用户是否登陆 cookie.id 有值 cookie.admin = 1 // POST /login app.get('/home',function(req,res){ res.setHeader('content-type','text/html;charset=utf-8'); res.end('网站首页!!!'); }); app.get('/list',function(req,res){ res.setHeader('content-type','text/html;charset=utf-8'); res.end('网站列表页!!!'); }); //网站后台 app.get('/admin',function(req,res){ //检测用户是否登陆 cookie.id 有值 cookie.admin = 1 if(req.cookies.id && req.cookies.admin == 1){ res.setHeader('content-type','text/html;charset=utf-8'); res.end('网站后台!!!'); }else{ res.redirect('/login'); } }); //登陆页面 app.get('/login', function(req,res){ //显示表单 res.render('login'); }); //登陆操作 app.post('/login', function(req,res){ //获取参数 var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files) { //fields 对象 if(fields.username == 'admin' && fields.password == 'admin'){ //参数正确 写入cookie res.setHeader('content-type','text/html;charset=utf-8'); res.cookie('id', 100, {maxAge: 600000}); res.cookie('admin', 1, {maxAge: 600000}); res.end('登陆成功'); }else{ //参数错误 跳转到 登陆页面 res.redirect('/login'); } }); }); app.listen(80);