Koa2學習(八)使用session

Koa2學習(八)使用session

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
  1. 這個ctx.session是針對某一個瀏覽器用戶的。
  2. 不斷地刷新訪問瀏覽器,瀏覽器上顯示的訪問次數會增長。
  3. 若是不使用數據庫,session是保存在內存中的。在服務端一般會使用redis等方案來使session持久化。

如今咱們來模擬一個簡單的登錄: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
  1. 當用戶登錄到login頁面時,session會將zhangsan保存爲user_name。
  2. 用戶訪問index頁面時,session會對當前的user_name作匹配,若是匹配成功,則認證登錄成功。
  3. 用戶訪問logout頁面是,session會自我銷燬。
  4. 這樣再次訪問index頁面時,登錄就會失敗。
相關文章
相關標籤/搜索