koa2 session mysql_koa2实现session的两种方式(基于Redis 和MySQL)
一.基于MySQL的實(shí)現(xiàn)方式
這種方式需要安裝koa-session-minimal和koa-mysql-session兩個(gè)依賴。
執(zhí)行
npm install koa-session-minimal koa-mysql-session
項(xiàng)目配置:
const session = require('koa-session-minimal');
const MysqlStore= require('koa-mysql-session');
const config= require('./config/default.js'); //數(shù)據(jù)庫(kù)配置
const Koa = require('koa');
const app=new Koa();//session存儲(chǔ)配置
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)
}));
這種方式會(huì)自動(dòng)在數(shù)據(jù)庫(kù)建立一個(gè)表:
在瀏覽器的cookie中會(huì)生成一個(gè)以?USER_SID 為鍵的cookie。通過(guò)ctx的session屬性可以修改更新刪除session的值。
缺點(diǎn)是每次對(duì)session的操作需要查詢數(shù)據(jù)庫(kù),比較耗時(shí)。
二、基于Redis的實(shí)現(xiàn)方式
主要用到了koa-session2和ioredis。
npm install koa-session2 ioredis
項(xiàng)目配置:
//redis
const session = require("koa-session2");
const Store= require("./config/Store");//使用redis作為session存儲(chǔ)
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;
這樣,每次登陸就可以通過(guò)Redis來(lái)存儲(chǔ)會(huì)話信息,由于Redis直接是運(yùn)行在內(nèi)存中的,因此速度會(huì)比較快。
通過(guò)get key 即可查看相應(yīng)的session信息。
喜歡這篇文章?歡迎打賞~~
總結(jié)
以上是生活随笔為你收集整理的koa2 session mysql_koa2实现session的两种方式(基于Redis 和MySQL)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql 返回随机行_从mysql数据
- 下一篇: wdcp查看mysql日志_查看修改服务