文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2014-08-19 21:27

关注


	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的两种方式(基于Redis 和MySQL)

原文地址:https://www.cnblogs.com/it-xiong/p/13451521.html

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯