nodejs-5.6 cookie-parser

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);
app.js

 

 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);
app2.js

 

posted @ 2018-08-23 16:09  心之所在无畏无惧  阅读(2451)  评论(0编辑  收藏  举报