• 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
  • 相关阅读:
    pip install uwsgi 报错 AttributeError: module 'os' has no attribute 'uname'
    npm安装vue
    Node.js安装及环境配置之Windows篇
    Centos7 安装nodejs
    Centos7 Jenkins 插件下载速度慢、安装失败
    Centos7 使用docker 安装redis
    Centos7 安装jdk
    supervisor配置文件详解
    MySQL5.7 group by新特性,报错1055
    配置python虚拟环境Virtualenv及pyenv
  • 原文地址:https://www.cnblogs.com/xzsz/p/9524403.html
Copyright © 2020-2023  润新知