目录
通过 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})
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和Localstorage和后端没关系