cookie 和 session 都是保存用户状态的机制,今天介绍下它们在 koa 中的使用。
cookie
cookie的使用
cookie可以记录用户的状态信息,在koa2中设置 cookie 的方法如下:
1
| ctx.cookies.set(key, value, [options])
|
其中 options 中的常用参数如下:
1 2 3 4 5 6 7
| maxAge: cookie过期时间 expires:cookie的过期日期 path: cookie路径,默认是 / domain: cookie的域名 secure: 安全 cookie ,默认为 false,设置成true时表示只有https可以访问 httpOnly: true-表示只有服务器端可以访问,默认true(不能在浏览器中使用js访问) overwrite: 是否覆盖之前设置的同名 cookie,默认false
|
获取cookie中的数据:
demo.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| const Koa = require('koa'); const Router = require('koa-router');
const app = new Koa(); const router = new Router();
router.get('/', async (ctx, next)=>{ ctx.cookies.set( 'userinfo', 'hello cookies', { domain: '127.0.0.1', path: '/get', maxAge: 60 * 60 * 100, expires: new Date('2020-07-04'), httpOnly: false, overwrite: false, } ); ctx.body = 'cookies is ok'; }); router.get('/get', async (ctx, next)=>{ let userinfo = ctx.cookies.get('userinfo'); console.log(userinfo); ctx.body = userinfo; });
app.use(router.routes()).use(router.allowedMethods());
app.listen(8095, ()=>{ console.log('server starting ...'); });
|
当使用下面的url访问服务时,会分别设置cookie和获取cookie:
1 2
| http://127.0.0.1:8095/ http://127.0.0.1:8095/get
|
设置 cookie 后,可以在浏览器的 Application 里面看到信息。
cookie中设置中文
使用 ctx.cookies.set() 设置中文cookie值时,会抛出异常:
1
| TypeError: argument value is invalid
|
此时,可以先将中文转换成 base64 编码,再把编码后的中文设置到 cookie 中即可,取 cookie 数据的时候需要解码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| const Koa = require('koa'); const Router = require('koa-router');
const app = new Koa(); const router = new Router();
router.get('/', async (ctx, next)=>{ let userinfo = new Buffer('中文cookie来啦').toString('base64'); ctx.cookies.set( 'userinfo', userinfo, { domain: '127.0.0.1', path: '/get', maxAge: 60 * 60 * 100, expires: new Date('2020-07-04'), httpOnly: false, overwrite: false, } ); ctx.body = 'cookies is ok'; }); router.get('/get', async (ctx, next)=>{ let userinfo = ctx.cookies.get('userinfo'); let info = new Buffer(userinfo, 'base64').toString(); console.log(info); ctx.body = info; });
app.use(router.routes()).use(router.allowedMethods());
app.listen(8095, ()=>{ console.log('server starting ...'); });
|
session
session是保存在服务端的一种记录用户状态信息的机制(cookie保存在客户端)。下面看一下它在 koa 中的使用。
session的使用
koa 中使用 session 需要安装 koa-session 模块:
1
| npm install --save koa-session
|
使用例子如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| const Koa = require('koa'); const Session = require('koa-session'); const Router = require('koa-router');
const app = new Koa(); const router = new Router();
app.keys = ['some secret hurr']; let CONFIG = { key: 'koa.sess', maxAge: 86400000, autoCommit: true, overwrite: true, httpOnly: true, signed: true, rolling: false, renew: true }; router.get('/', async (ctx, next)=>{ ctx.session.name = 'koa session' ctx.body = 'session is ok'; }); router.get('/get', async (ctx, next)=>{ let name = ctx.session.name; console.log(name); ctx.body = name; });
app.use(Session(CONFIG, app));
app.use(router.routes()).use(router.allowedMethods());
app.listen(8095, ()=>{ console.log('server starting ...'); });
|
cookie 与 session 的使用就介绍到这里,感兴趣的小伙伴可以深入研究一下。