nodejs-5.6 cookie-parser

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 });
  • 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')

 

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);
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
相关文章
相关标签/搜索