前言
接下來將會講解 session 這是一個非常重要的插件,舉凡登入驗證都需要這個套件
起手式
首先要先來安裝 koa-session 套件
其實在官方文件下面已經有基本的 Example 可以讓我們參考,我們只需要引入套件並複製貼上即可
我順便把註解給翻譯成中文,這樣會比較清楚相關設置 (以下都是 Google 翻譯配合人翻)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| const session = require('koa-session');
app.keys = ['some secret hurr'];
const CONFIG = { key: 'koa:sess', maxAge: 86400000, autoCommit: true, overwrite: true, httpOnly: true, signed: true, rolling: false, renew: true, };
app.use(session(CONFIG, app));
|
使用方式
接下來我們就可以嘗試傳送表單資訊並存入 session 中嘗試看看,首先我們要改一下原本的 router
1 2 3 4 5 6
| router.post('/post', async (ctx, next) => { ctx.session.email = ctx.request.body.email; ctx.session.name = ctx.request.body.name; console.log(ctx.session); ctx.redirect('/'); });
|
如果出現 Error: .keys required for signed cookies 代表有可能你缺少這一行
1
| app.keys = ['some secret hurr'];
|
如果沒有問題我們可以嘗試將表單資料 post 看看,如果 session 正常的話,將會看到剛剛 post 的資料被儲存至 session 中
session
cookie
接下來你可能會問 cookie 呢?其實 koa 本身就已經使用了 cookie 模組,所以並不需要另外安裝,它都是包裝在 ctx 中,若要使用的話就如下
1 2
| ctx.cookies.set ctx.cookies.get
|
那設置 ctx.cookie.set 也可以做一些設置,幫助我們 cookie 時效、路徑、是否開給 JavaScript 讀取等等,範例如下
1 2 3 4 5 6 7 8 9
| cookieSet = { domain: 'localhost', path: '/index', maxAge: 10 * 60 * 1000, expires: new Date('2017-02-15'), httpOnly: false, overwrite: false } ctx.cookies.set('cid','Ray', cookieSet);
|
cookie
但是要注意一件事情 cookies 不能設置中文的值,例如 ctx.cookies.set('cid','王小明', cookieSet); 這會出現值錯誤
TypeError: argument value is invalid
如果要解決這個問題的話,可以使用編碼的方式來解決,最簡單的方式就是使用 encodeURIComponent
1
| ctx.cookies.set('cid',encodeURIComponent('Ray'), cookieSet);
|
只是解碼時就要使用 decodeURIComponent
1
| decodeURIComponent(ctx.cokkies.get('cid'))
|
補充
最後補充有可能會有人以為 cookie 就沒套件這種東西,其實是有的,所以最後這邊也一併附上 koa-cookie 套件連結
套件連結