zoukankan      html  css  js  c++  java
  • Nodejs内置中间件 第三方中间件 cookie和session

    内置中间件

    express也提供了好用的内置中间件,如提供一个静态资源管理的中间件,通过此中间件就可以帮助为我们快速搭建一个静态资源服务器

    app.use(express.static('托管目录地址'))

    第三方中间件

    express搭建的web服务器中想要接受表单中的post数据可以通过第3方中间件帮助解析获取post数据

    步骤如下:

    • 安装第3方中间件 npm i -S body-parser 
      • 在应用文件中导入 require
      • 通过中间件调用 app.use(body.urlencoded({extended: false}))
      • cookie

        HTTP是一个无状态协议,客户端每次发出请求时候,下一次请求得不到上一次请求的数据,我们如何将上一次请求和下一次请求的数据关联起来呢?如用户登录成功后,跳转到其他页面时候,其他的页面是如何知道该用户已经登录了呢?此时就可以使用到cookie中的值来判断用户是否登录cookie可以保持用户数据。

        cookie它是一个由浏览器和服务器共同协作实现的(cookie是存储于浏览器中)cookie分为如下几步实现:

        • 服务器端向客户端发送cookie并指定cookie的过期时间。
        • 浏览器将cookie保存起来。
        • 之后每次请求都会将cookie发向服务器端,在cookie没有过期时间内服务器都可以得到cookie中的值。

        express中操作的cookie使用 cookie-parser模块  cnpm i -S cookie-parser

        const express = require('express');

        const cookieParser = require('cookie-parser');

        const app = express();

        // 中间件引入

        app.use(cookieParser());

         

        app.get('/', (req, res) => {

          // 服务器端通过req来获取cookie数据

          if (req.cookies.username) {

            console.log(req.cookies);

            res.send('再次欢迎你');

          } else {

        // cookie设置过期时间为1

        // maxAge 设置cookie过期时间  毫秒

            res.cookie('username', 'admin', {maxAge: 86400*1000});

            res.send('欢迎你~');

          }

        });

         

         

        app.listen(3000)

      创建 application/x-www-form-urlencoded 解析

      • 在匹配的路由中通过 req.body获数post中数据

      注意:Express 内置的 express.urlencoded 中间件,就是基于 body-parser 这个第三方中间件进一步封装出来的。但内置的有版本兼容问题,所以一般项目选择安装使用第3

    • npm安装cookie模块

    • 引入中间件

    • 写入读取cookie

    • session

      cookie操作很方便,但是使用cookie安全性不高,cookie中的所有数据存储在客户端浏览器中,数据很容易被伪造;所以一些重要的数据就不能放在cookie当中了,并且cookie还有一个缺点就是不能存放太多的数据,一般浏览大约在4k左右,为了解决这些问题,session就产生了,session中的数据保留在服务端的。

      把数据放到cookie中是不安全的,我们可以在cookie中存放一个sessionId值,该sessionId会与服务器端之间会产生映射关系,如果sessionId被篡改的话,那么它就不会与服务器端数据之间产生映射,因此安全性就更好,并且session的有效期一般比较短,一般都是设置是20分钟左右,如果在20分钟内客户端与服务端没有产生交互,服务端就会将数据删除。

      session的原理是通过一个sessionid来进行的,sessionid是放在客户端的cookie中,当请求到来时候,服务端会检查cookie中保存的sessionid是否有,并且与服务端的session数据映射起来,进行数据的保存和修改,也就是说当我们浏览一个网页时候,服务端会随机生成一个1024比特长的字符串,然后存在cookie中的sessionid字段中,当我们下次访问时,cookie会带有sessionid这个字段。

      express中操作的cookie使用 cookie-seesion模块  cnpm i -S cookie-session

      const express = require('express');

      const session = require('express-session');

      const app = express();

       

      app.use(session({

        name: 'sessionId',

        // sessionid加密的key,随便填写s

        secret: 'afsfwefwlfjewlfewfef',

        maxAge: 20 * 60 * 1000 // 20分钟

      }));

       

      app.get('/, (req, res) => {

        if(!req.session['view']){

          req.session['view'] = 1;

        }else{

          req.session['view']++;

        }

        res.send(`欢迎您第 ${req.session['view']} 次访问!`);

      })

      app.listen(3000)

    • 安装中间件

    • 引入session模块并配置

    • 读写session

    右侧打赏一下 代码改变世界一块二块也是爱
  • 相关阅读:
    Centos7.x做开机启动脚本
    贝叶斯方法之一
    R程序包
    c#调用R
    感悟--不可抗拒的行为
    IP等级
    词语
    关于editplus设置java和c#
    csc命令
    editplus配置csharp
  • 原文地址:https://www.cnblogs.com/ht955/p/14188689.html
Copyright © 2011-2022 走看看