koa-session中间件

koa2原生功能只提供了cookie的操作,但是没有提供session操作。session就只用自己实现或者通过第三方中间件实现。在koa2中实现session的方案有一下几种

如果session数据量很小,可以直接存在内存中
如果session数据量很大,则需要存储介质存放session数据

数据库存储方案

1.将session存放在MySQL数据库中
2.需要用到中间件:

koa-session-minimal 适用于koa2 的session中间件,提供存储介质的读写接口 。
koa-mysql-session 为koa-session-minimal中间件提供MySQL数据库的session数据读写操作。

3.将sessionId和对应的数据存到数据库
4.将数据库存储的sessionId存到页面的cookie中
5.根据cookie的sessionId去获取对于的session信息

npm i koa-session-minimal //适用于koa2 的session中间件,提供存储介质的读写接口 。

npm i koa-mysql-session //为koa-session-minimal中间件提供MySQL数据库的session数据读写操作。

贴代码
const Koa = require('koa')
const session = require('koa-session-minimal')
const MysqlSession = require('koa-mysql-session')
const config = require('../config')

const app = new Koa()

//配置存储session信息的mysql
let store = new MysqlSession({
    user:"root",
    password:'',
    database:'koa_demo',
    host:'127.0.0.1'
})

// 存放sessionId的cookie配置
let cookie = {
    maxAge: '', // cookie有效时长
    expires: '',  // cookie失效时间
    path: '', // 写cookie所在的路径
    domain: '', // 写cookie所在的域名
    httpOnly: '', // 是否只用于http请求中获取
    overwrite: 'false',  // 是否允许重写
    secure: '',
    sameSite: '',
    signed: '',
}

// 使用session中间件
app.use(session({
    key: 'SESSION_ID',
    store: store,
    cookie: cookie
}))

app.use( async ( ctx ) => {
    // 设置session
    if ( ctx.url === '/set' ){
        ctx.session = {
            user_id: Math.random().toString(36).substr(2),
            count: 0
        }
        ctx.body = ctx.session
    }else if( ctx.url === '/' ){
    // 读取session信息
        ctx.session.count = ctx.session.count + 1
        ctx.body = ctx.session
    } 
})
  
app.listen( config.port ,()=>{console.log(`端口号为${config.port}的node项目启动成功`);})
koa-session
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。