cookie-parserhtml
官网:https://github.com/expressjs/cookie-parserios
1、概念: cookie ==> 小甜饼 , parser ==> 解析器, cookie-parser 就是用来解析 cookie 的. git
2、cookie存储位置:cookie是存储在客户端浏览器中.每一个浏览器的 cookie 都是独立的, 不能共享.github
cookie 其实就是请求头中的一个数据.chrome
做用: 方便向服务器发送数据,当服务器向客户端在响应头写入cookie,下一次发送请求会把cookie跟请求头一块儿发送给服务器。express
(因此若是没有cookie-parser包,咱们也能够经过req.headers在请求头中获取cookie)npm
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 .......
3、使用:服务器
1.安装 cnpm install cookie-parser --savecookie
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 });
2.2 读取cookie : req.cookies.name
2.3 清除cookie : res.clearCookie('name')
4、实例连接栗子
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);