前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Egg 中设置与获取Cookie

Egg 中设置与获取Cookie

作者头像
越陌度阡
发布2020-11-26 12:50:36
1.3K0
发布2020-11-26 12:50:36
举报

HTTP 是无状态协议,简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站,每一次的访问,都是没有任何关系的。

Cookie 是存储于访问者的计算机中的变量,可以让同一个浏览器访问同一个域名的时候共享数据 ,在Egg中设置与获取cookie比较方便。

最简单的设置:

代码语言:javascript
复制
this.ctx.cookies.set('username','Lucy');

以上设置由于没有加任何的配置选项,当浏器关闭以后cookie就销毁了,另外这种最简单的设置也没法将cookie设置成中文。

代码语言:javascript
复制
this.ctx.cookies.set('username','露西');  

Cookie设置成中文时,在浏览器中访问时会报错: argument value is invalid (code: ERR_ASSERTION)

Cookie的设置选项有很多,官网均有介绍,常见的设置如下:

代码语言:javascript
复制
'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
    async index() {
        this.ctx.cookies.set("username", '张三', {
            // 设置cookie的有效期
            maxAge: 1000 * 3600 * 24, 
            // 只允许服务端访问cookie    
            httpOnly: true,
            // 对cookie进行签名,防止用户修改cookie
            signed: true,  
            // 是否对cookie进行加密
            // cookie加密后获取的时候要对cookie进行解密  
            // cookie加密后就可以设置中文cookie 
            encrypt: true   
        })
        await this.ctx.render('home');
    }
}
module.exports = HomeController;

Cookie 获取的代码如下:

代码语言:javascript
复制
'use strict';
const Controller = require('egg').Controller;
class NewsController extends Controller {
    async index() {
        // 获取cookie
        // var username=this.ctx.cookies.get('username');
        
        // 获取加密的cookie,要加上{encrypt:true}
        var username = this.ctx.cookies.get('username', {
            encrypt: true
        });
        await this.ctx.render('news', {
            username: username
        });
    }
}
module.exports = NewsController;

Cookie清除的代码如下:

代码语言:javascript
复制
'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
    // 退出登录
    async loginOut() {
        // 清理cookie
        this.ctx.cookies.set('username',null);
        // 重定向
        this.ctx.redirect('/login');
    }
}
module.exports = HomeController;

当设置的cookie为一个对象时,要将该对象进行JSON.stringify(),获取的时候再用JSON.parse()进行解析。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档