zoukankan      html  css  js  c++  java
  • koa session 存储方案

    通过 koa-session-minimal 代理层实现到 mysql 的 session 存储

    const Koa = require("koa");
    const Router = require("@koa/router");
    const session = require("koa-session-minimal");
    const MysqlSession = require("koa-mysql-session");
    
    const app = new Koa();
    const router = new Router();
    
    /**
      配置存储 session 信息的 mysql
    
      database 数据库需要我们提前创建好
    */
    let store = new MysqlSession({
      user: "root", // user
      password: "anc123",
      database: "base",
      host: "127.0.0.1"
    });
    
    let cookie = {
      httpOnly: false
    };
    
    /**
      key: 发送到客户端 cookie 的 key
    */
    app.use(
      session({
        key: "session_id",
        store, // session 持久化的仓库, 在不关联数据库的情况下, 内部实现了一个临时存储仓库
        cookie
      })
    );
    
    router.get("/set", ctx => {
      /**
        设置 session 数据, 并且将 {} 持久化到数据库
      */
      ctx.session = {
        user_id: Math.random()
          .toString(36)
          .substr(2),
        count: 0
      };
    
      ctx.body = ctx.session;
    });
    
    router.get("/", ctx => {
      let hasSession = ctx.session && Object.keys(ctx.session).length > 0;
      if (hasSession) {
        ctx.session.count = ctx.session.count + 1;
        ctx.body = ctx.session;
      } else {
        ctx.body = `
          <p>服务端没有当前用户 session 信息</p>
          <p>请访问 /set 路径来为当前用户生成 session 信息</p>
          <a href="/set">/set</a>
        `;
      }
    });
    
    app.use(router.routes(), router.allowedMethods());
    
    app.listen(3002);
    

    再配上一张流程图:

  • 相关阅读:
    Win10 UWP程序内的文件格式
    第一章
    英语
    BOM
    html基础
    协程
    python
    列表 元组 range
    我的Python学习笔记(四):动态添加属性和方法
    我的Python学习笔记(三):私有变量
  • 原文地址:https://www.cnblogs.com/qiqingfu/p/12546129.html
Copyright © 2011-2022 走看看