koa2使用cookie
koa提供了从上下文直接读取、写入cookie的方法
- ctx.cookies.get(name, [options]) 读取上下文请求中的cookie
- ctx.cookies.set(name, value, [options]) 在上下文写入cookie
关键代码:12345678910111213141516171819const cookies = require('cookies');app.use(async (ctx) => {if (ctx.url === '/') {// 设置cookiesctx.cookies.set('username', 'fanerge222', {domain: 'localhost', // 写cookie所在的域名path: '/', // 写cookie所在的路径maxAge: 10 * 60 * 1000, // cookie有效时长expires: new Date('2017-08-18'), // cookie失效时间httpOnly: false, // 是否只用于http请求中获取overwrite: false // 是否允许重写});ctx.body = 'cookies写入成功'} else {// 获取cookieconst cookie = ctx.cookies.get('username'); // 'fanerge222'ctx.body = cookie}})
koa2实现session
koa2原生功能只提供了cookie的操作,但是没有提供session操作。session就只用自己实现或者通过第三方中间件实现。
在koa2中实现session的方案有以下几种
- 如果session数据量很小,可以直接存在内存中
- 如果session数据量很大,则需要存储介质存放session数据
数据库存储方案 - 将session存放在MySQL数据库中
- 需要用到中间件
koa-session-minimal 适用于koa2 的session中间件,提供存储介质的读写接口 。
koa-mysql-session 为koa-session-minimal中间件提供MySQL数据库的session数据读写操作。 - 将sessionId和对应的数据存到数据库
- 将数据库的存储的sessionId存到页面的cookie中
- 根据cookie的sessionId去获取对于的session信息
关键代码:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849const session = require('koa-session-minimal')const MysqlSession = require('koa-mysql-session')// 配置存储session信息的mysqllet store = new MysqlSession({user: 'root',password: 'root',database: 'koa_demo',host: '127.0.0.1',})// 存放SESSION_ID的cookie配置let cookie = {maxAge: '', // cookie有效时长expires: '', // cookie失效时间path: '', // 写cookie所在的路径domain: '', // 写cookie所在的域名httpOnly: '', // 是否只用于http请求中获取overwrite: '', // 是否允许重写secure: '',sameSite: '',signed: '',}// 使用session中间件app.use(session({key: 'SESSION_ID',store: store, // 使用数据库来存储cookie: cookie // 将SESSION_ID存在cookie中}))app.use( async ( ctx ) => {// 设置sessionif ( 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 + 1ctx.body = ctx.session}})
参考文档:
koa-note
koa-static
koa-session-minimal
koa-mysql-session