koa2框架不提供session的处理方法,这里咱们须要借助一个第三方中间件koa-session
来处理session。
先安装插件:javascript
$ npm i koa-session
经过注册这个中间件,咱们能够直接经过ctx.session
来操做session:java
const Koa = require('koa') const app = new Koa() const session = require('koa-session') app.keys = ['secret'] // session加密字段 app.use(session({ key: 'koa:sess', //cookie key (default is koa:sess) maxAge: 86400000, // cookie的过时时间 maxAge in ms (default is 1 days) overwrite: true, //是否能够overwrite (默认default true) httpOnly: true, //cookie是否只有服务器端能够访问 httpOnly or not (default true) signed: true, //签名默认true rolling: false, //在每次请求时强行设置cookie,这将重置cookie过时时间(默认:false) renew: false, //(boolean) renew session when session is nearly expired, }, app)) app.use(ctx => { // ignore favicon if (ctx.path === '/favicon.ico') return console.log(ctx.session) let n = ctx.session.views || 0 ctx.session.views = ++n ctx.body = n + ' views' }); app.listen(8000) module.exports = app
如今咱们来模拟一个简单的登录:redis
const Koa = require('koa') const app = new Koa() const session = require('koa-session') app.keys = ['secret'] // session加密字段 app.use(session({}, app)) app.use(async (ctx, next) => { if (ctx.url === '/login') { ctx.session.user_name = 'zhangsan' ctx.body = { msg: '登陆成功' } } await next() }) app.use(async (ctx, next) => { if (ctx.url === '/logout') { ctx.session = null ctx.body = { msg: '退出成功' } } await next() }) app.use(async ctx => { console.log(ctx.session) if (ctx.url === '/index') { if (ctx.session.user_name === 'zhangsan') { ctx.body = { msg: '成功匹配到用户zhangsan' } } else { ctx.body = { msg: '登录验证失败' } } } }) app.listen(8000) module.exports = app