日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2023/12/18 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 koa2 session mysql_koa2实现session的两种方式(基于Redis 和MySQL) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.基于MySQL的實現方式

這種方式需要安裝koa-session-minimal和koa-mysql-session兩個依賴。

執行

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

項目配置:

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)

}));

這種方式會自動在數據庫建立一個表:

在瀏覽器的cookie中會生成一個以?USER_SID 為鍵的cookie。通過ctx的session屬性可以修改更新刪除session的值。

缺點是每次對session的操作需要查詢數據庫,比較耗時。

二、基于Redis的實現方式

主要用到了koa-session2和ioredis。

npm install koa-session2 ioredis

項目配置:

//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;

這樣,每次登陸就可以通過Redis來存儲會話信息,由于Redis直接是運行在內存中的,因此速度會比較快。

通過get key 即可查看相應的session信息。

喜歡這篇文章?歡迎打賞~~

總結

以上是生活随笔為你收集整理的koa2 session mysql_koa2实现session的两种方式(基于Redis 和MySQL)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。