框架:koa,通過koa-generator創建
redis: 本地搭建,使用默認帳號,安裝說明地址以及默認啟動設置:https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/
中間件:koa-generic-redis, koa-redis
1. 配置中間件:
const session = require('koa-generic-session')
const RedisStore = require('koa-redis')app.use(session({key:"koa", // 設置返回給瀏覽器的包含sessionId的cookie的keystore: new RedisStore({ // 連接本地redis的信息,如果需要密碼,需要設置/etc/redis/redis.conf 的 host:"localhost",port:"6379",password:"111111"}),ttl:60 * 1000
}))
2. sessionID保存原理解析
router.get('/session',async (ctx,next)=>{if(!ctx.session.user){ctx.session.user={name:'xxx'} // 如何沒有session}ctx.body = ctx.session.user
})
ctx.session.user = {name:'xxx'}, 這行代碼會觸發生成sessionId,koa-redis中間件會將值寫入到redis,如圖所示:
koa-generic-session中間件負責生成sessionId,并將中間件配置的key的值作為cookie的名字,sessionId作為值,返回到瀏覽器客戶端。如圖所示:
當瀏覽器再次請求的時候,請求頭會攜帶cookie,如圖:
接口相應的邏輯里,可以從請求頭的cookie里獲取sessionId,后端從redis里獲取sessionId,如果沒有表示已過期(redis可以設置過期時間)。完整的cookie+sessionid會話過程就整理清楚了