当前位置: 首页 > 工具软件 > Cookies.js > 使用案例 >

8.egg.js cookie的使用

史旺
2023-12-01

一、cookie简介

1.cookie是存储于访问者的计算机中的变量,可以让同一个浏览器访问同一个域名时共享数据。

二、egg.js中cookie的设置和获取

1.语法

cookie设置语法:ctx.cookies.set(key, value, options)

this.cookies.set('name', 'zhangsan')

cookie获取语法:ctx.cookies.get(key, options)

this.ctx.cookies.get('name')

2.详细案例

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})
    }
}

三、egg.js中cookie参数options (正规写法)

当浏览器完全关闭后,cookie会被浏览器清除;

1.新增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');
    }
}

2.获取cookie时解密

语法: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 })
    }
}

四、egg.js中设置中文cookie

1.方案一

参考上一条,设置加密后就可以存储中文的cookie。

2.方案二

使用buffer-暂不使用

五、清除cookie

语法:this.ctx.cookies.set('name', null)

或者设置maxAge过期时间为0

五、注意

  1. 默认不能设置中文,否则报错argument value is invalid (code: ERR_ASSERTION)
 类似资料: