目录
一、缓存Cookie
通过 ctx.cookies可以在 Controller 中便捷、安全的设置和读取 Cookie
classCookieControllerextendsController {
async add() {
const ctx = this.ctx;
let count = ctx.cookies.get('count'); //核心代码==> 存
count = count ? Number(count) : 0;
ctx.cookies.set('count', ++count);
ctx.body = count;
}
async remove() {
const ctx = this.ctx;
const count = ctx.cookies.set('count', null); //核心代码==> 取
ctx.status = 204;
}
}
需要注意的是,cookie默认不支持中文,可以尝试转码,如encodeURI('中文egg'),然后再转回来decodeURI(ctx.cookies.get('username')) 清除cookie把值设置为null即可。
在设置cookie时有个对象类型的可选参数,可以对cookie进行相关设置: maxAge:设置cookie的有效期,单位毫秒,默认浏览器关闭消失; httpOnly:设置cookie是否允许js访问,默认true,不允许; overwrite:如果设置为true,相同的键值对会被覆盖,否则发送两个; signed:如果为true表示对cookie进行签名,不是加密,只是防止被篡改,注意在获取的时候也要提供该设置进行匹配; encrypt:是否加密,true加密后客户端看不到明文,只能在服务器端获取,注意在获取的时候也要提供该设置进行匹配;eg: this.ctx.cookies.set("email",ziduan.email,{maxAge:1000*60*60*24*365})
二、缓存Session
1.Session配置
// config/config.default.js文件
config.session = {
key: 'SSION',
maxAge: 24 * 3600 * 1000, // 1 天
httpOnly: true,
encrypt: true,
};
2.设置Session
class SessionController extends Controller {
async setuser() {
this.ctx.session.userid = 12345;//设置缓存数据
this.ctx.session.maxAge = ms('30d')//单独设置过期时间
}
}
//如果要删除userid,可以直接将它赋值为 null
//设置 session 属性时不要以 _ 开头,不要是已存在的功能属性
3.获取Session 首先要知道后端的缓存与前端的缓存的区别(面试题)
class SessionController extends Controller {
async getuser() {
var userid=this.ctx.session.userid
console.log(userid)//在所有接口中都能访问userid,除非没有设置过
}
}
三、cookies和Session的区别:
cookies:把信息缓存到前端(客户端)==>不合理
Session:把信息存到后端
后端的cookies 和 session都是前端的cookies
后端的 session==>把要缓存的信息存到了后端
前端的cookies==>把要缓存的信息存到了前端
前端的session和Localstorage和后端没关系