写在前面,这里不对koa2做介绍,主要介绍一下koa2实现session功能。

入口文件app.js

const Koa = require('koa')  // v2.7.0
const app = new Koa()
const json = require('koa-json')
const bodyparser = require('koa-bodyparser')
const session = require('koa-generic-session') // v2.1.1
const redisStore = require('koa-redis')  // v4.0.1
// router
const user = require('./routes/user')

app.use(user.routes(), user.allowedMethods())
// 解析request body
app.use(bodyparser({
  enableTypes:['json', 'form', 'text']
}))
app.use(json())

//session 配置  主要看这里!!!
app.keys = ['abc123']    // 加密cookie用,可以随意写一个string
app.use(session({
  cookie: {
    path: '/',           // 项目根路径,表示cookie用于整个项目
    httpOnly: true,      // 禁止客户端通过js脚本修改cookie
    maxAge: 24 * 60 * 60 * 1000  // cookie过期时间 这里设置1天
  },
  // 配置redis
  store: redisStore({
    all: '127.0.0.1:6379'  // 这里用本地redis服务,默认端口6379
  })
}))

module.exports = app

这样就配置好了,接下来我们写一个路由进行测试,在routers/user.js中写入以下代码:

const router = require('koa-router')()

router.prefix('/api/user')

// 测试session
router.get('/session-test', async function (ctx, next) {
    if (ctx.session.viewCount == null) {
        ctx.session.viewCount = 0
    }
    
    ctx.session.viewCount ++

    ctx.body = {
        errno: 0,
        viewCount: ctx.session.viewCount
    }
}) 

module.expor![image.png](/img/bVcRyle)

然后,我们运行项目,打开地址 http://localhost:8000/api/use...

image.png
然后,刷新页面,会看到viewCount的值一直在增加:

image.png
这时候去redis客户端看一下是否已经存入:

image.png

然后,看一下浏览器的cookie:

image.png
redis数据库和cookie都已经存入,此时最后再验证多个用户的话,是否互不影响,这时候再打开一个浏览器,同样输入http://localhost:8000/api/use...

image.png

可以发现,新打开的浏览器中,viewCount字段的值是1,而之前打开的浏览器viewCount的值还是5,而且刷新当前浏览器,viewCount自增,且不影响之前打开的浏览器中viewCount的值image.png

![上传中...]()

到这里,session功能已基本实现。


huangsh
281 声望16 粉丝

灵魂和皮囊能够握手言和,面子和里子能够始终如一。