1.cookie是存储于访问者的计算机中的变量,可以让同一个浏览器访问同一个域名时共享数据。
cookie设置语法:ctx.cookies.set(key, value, options)
this.cookies.set('name', 'zhangsan')
cookie获取语法:ctx.cookies.get(key, options)
this.ctx.cookies.get('name')
1.在home.js 的控制器中设置
class HomeController extends Controller {
async index() {
// 设置一个值给news页面用
this.ctx.cookies.set('username', 'zhangsan');
await this.ctx.render('home');
}
}
2.在news控制器中获取
class NewsController extends Controller {
async index() {
let userinfo = this.ctx.cookies.get('username');
console.log('userinfo: ', userinfo);
await this.ctx.render('news', {userinfo})
}
}
当浏览器完全关闭后,cookie会被浏览器清除;
@file(home.js)
class HomeController extends Controller {
async index() {
this.ctx.cookies.set('egg-username', 'zhangsan', {
maxAge: 1000*3600*24, // 存储一天
httpOnly: true, // 禁止前端访问
signed: true, // 对cookie签名,防止用户修改cookie
encrypt: true, // 是否对cookie加密,若加密需要解密
});
await this.ctx.render('home');
}
}
语法:this.ctx.cookies.get('username', { encrypt: true })
@file(news.js)
class NewsController extends Controller {
async index() {
// 获取加密的cookie
let userinfo = this.ctx.cookies.get('egg-username', { encrypt: true });
await this.ctx.render('news', { userinfo })
}
}
参考上一条,设置加密后就可以存储中文的cookie。
使用buffer-暂不使用
语法:this.ctx.cookies.set('name', null)
或者设置maxAge过期时间为0
argument value is invalid (code: ERR_ASSERTION)