一.基于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)相关推荐

  1. C++连接mysql的两种方式(ADO连接和mysql api连接)

    一.ADO连接mysql 1.安装mysql-5.5.20-win32.msi和mysql-connector-odbc-5.3.4-win32.msi(一般两个安装程序要匹配,否则可能连接不上)   ...

  2. 简单介绍MySQL开启事务的两种方式

    本篇文章给大家分享MySQL 是如何开启一个事务的,原文通过两种方式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧 方式 1 START TRANSACTION 或 ...

  3. matlab 转换 tfrecord,训练数据集与TFRecord互相转换的两种方式

    TensorFlow使用TFRecord格式来统一存储数据,该格式可以将图像数据.标签信息.图像路径以及宽高等不同类型的信息放在一起进行统一存储,从而方便有效的管理不同的属性. 将训练数据集转成TFR ...

  4. flask 操作mysql的两种方式-sqlalchemy操作

    flask 操作mysql的两种方式-sqlalchemy操作二.ORM sqlalchemy操作#coding=utf-8 # model.pyfrom app import dbclass Use ...

  5. ActiveMQ消息传递的两种方式

    1.什么是ActiveMQ? ActiveMQ是apache提供的开源的,实现消息传递的一个中间插件,可以和spring整合,是目前最流行的开源消息总线,ActiveMQ是一个完全支持JMS1.1和J ...

  6. java的websocket_java 实现websocket的两种方式实例详解

    一.介绍 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring与we ...

  7. java 实现websocket的两种方式

    简单说明 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring与we ...

  8. 制作Docker镜像的两种方式

    此文已由作者朱笑天授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.使用docker commit命令制作docker镜像 1. pull一个centos6.6的基础镜像, ...

  9. padding卷积的两种方式“SAME”和“VALID”

    conv2d是常用的实现卷积的,Tensorflow调用Conv的api时,常用代码如下: 查看:https://tensorflow.google.cn/api_docs/python/tf/nn/ ...

  10. easyui treegrid实现的两种方式

    感觉easyui官方的treegrid文档不是很清晰,当时使用的时候查了许多资料才做出来,现在总结一下两种实现方式的思路: 两种方式前台都一样: $('#tree').treegrid({url:&q ...

最新文章

  1. JAVA垃圾回收机制概要
  2. 教你怎么在vi和vim上查找字符串
  3. input file的默认value清空与赋值方法
  4. 无人职守安装的设计与部署
  5. Linux select/poll机制原理分析
  6. Application package 'AndroidManifest.xml' must have a minimum of 2 segments.
  7. mysql 删除版本信息_mysql5.5版本删除大表
  8. 如何将Node.js Streaming MapReduce引入Amazon EMR
  9. 如何用ASP读写TXT文本文件中的内容
  10. (超全)全面手动清理c盘的的步骤
  11. 菜鸟历程1腾讯云服务器 10元学生套餐购买
  12. 计算机组装图与名称,台式电脑组装硬件配置名称
  13. 浅谈各大搜索引擎蜘蛛
  14. LiveData详细分析
  15. 肾炎患者识别matlab,肾炎诊断 模型.doc
  16. 七种寻址方式(基址加变址寻址方式)
  17. 金华职称计算机考试中心,郑金华
  18. html做一页关于时间轴的网站,前端css实现最基本的时间轴的示例代码
  19. fiddler不能抓取浏览器数据_手机连接fiddler后,浏览器无法打开网页或者fiddler抓取不到手机应用相关数据的情况...
  20. BB10 SDK离线安装步骤

热门文章

  1. linux文件管理系统开发毕业,定稿毕业论文基于Linux的远程管理系统服务器端的实现word文档(范文1)...
  2. windows10怎么安装python第三方库_怎么在windows下安装python第三方包
  3. 网络资产管理系统_RFID固定资产管理系统_企业资产管理方案
  4. 下周开幕,给深圳的电子工程师准备的展会!
  5. verilog or VHDL出租车计价器电路设计
  6. html文字向上移动10px,HTML文字移动特效代码
  7. PHP网站开启gzip压缩,php中开启gzip压缩的2种方法代码
  8. 贝叶斯分类器_python机器学习API介绍10:多项式贝叶斯分类器
  9. 下次激活策略10_服装店营销策划方案,简单策略让服装超市提升10倍业绩
  10. android:layout_width=0.0dip,【教程】状态栏显示网速