koa2 session mysql_koa2实现session的两种方式(基于Redis 和MySQL)

fe3cbf35b158492c4cd31ec854f0f831.png

一.基于MySQL的实现方式

这种方式需要安装koa-session-minimal和koa-mysql-session两个依赖。

执行

npm install koa-session-minimal koa-mysql-session

项目配置:

fz.gif

const session = require(‘koa-session-minimal‘);

const MysqlStore = require(‘koa-mysql-session‘);

const config = require(‘./config/default.js‘); // 数据库配置

const Koa = require(‘koa‘);

const app = new Koa();

// session存储配置

const sessionMysqlConfig = {

user: config.database.USERNAME,

password: config.database.PASSWORD,

database: config.database.DATABASE,

host: config.database.HOST,

};

// 配置session中间件

app.use(session({

key: ‘USER_SID‘,

store: new MysqlStore(sessionMysqlConfig)

}));

fz.gif

这种方式会自动在数据库建立一个表:

d5d1506c0a11495613f74a3d4adfef8e.png

在浏览器的cookie中会生成一个以 USER_SID 为键的cookie。通过ctx的session属性可以修改更新删除session的值。

缺点是每次对session的操作需要查询数据库,比较耗时。

二、基于Redis的实现方式

主要用到了koa-session2和ioredis。

npm install koa-session2 ioredis

项目配置:

fz.gif

// redis

const session = require("koa-session2");

const Store = require("./config/Store");

// 使用redis作为session存储

app.use(session({

store: new Store(),

key: "SESSIONID", // default "koa:sess"

}));

config/Store.js

const Redis = require("ioredis");

const { Store } = require("koa-session2");

const redisConfig = require(‘./redis‘);

class RedisStore extends Store {

constructor() {

super();

this.redis = new Redis(redisConfig);

}

async get(sid, ctx) {

let data = await this.redis.get(`SESSION:${sid}`);

return JSON.parse(data);

}

async set(session, { sid = this.getID(24), maxAge = 1000000 } = {}, ctx) {

try {

// Use redis set EX to automatically drop expired sessions

await this.redis.set(`SESSION:${sid}`, JSON.stringify(session), ‘EX‘, maxAge / 1000);

} catch (e) {}

return sid;

}

async destroy(sid, ctx) {

return await this.redis.del(`SESSION:${sid}`);

}

}

module.exports = RedisStore;

fz.gif

e19ad660cea66eb71973c6181237d8a6.png

这样,每次登陆就可以通过Redis来存储会话信息,由于Redis直接是运行在内存中的,因此速度会比较快。

通过get key 即可查看相应的session信息。

koa2实现session的两种方式(基于Redis 和MySQL)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值