Egg.js 中 Cookie 的使用

1Cookie 简介

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

2Egg.js Cookie 的设置和获取

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

如:

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

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

如:

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

清除cookie

this.ctx.cookies.set('name',null);
或者设置 maxAge 过期时间为 0

3Egg.js Cookie 参数 options

https://eggjs.org/en/core/cookie-and-session.html#container

设置 cookie 建议的写法:

      this.ctx.cookies.set('key','value',{
          maxAge:1000*3600*24,  //cookie存储一天     设置过期时间后关闭浏览器重新打开cookie还存在
          httpOnly:true,
          signed:true,     //对cookie进行签名  防止用户修改cookie
          encrypt:true   //是否对cookie进行加密     如果cookie加密那么获取的时候要对cookie进行解密

      });
ctx.cookies.get('key', { encrypt: true
});

4Egg.js 中设置中文 Cookie

      //如果cookie加密以后就可以设置中文cookie   (encrypt:true)
      this.ctx.cookies.set("userinfo",'张三',{
          maxAge:1000*3600*24,  //cookie存储一天     设置过期时间后关闭浏览器重新打开cookie还存在
          httpOnly:true,
          signed:true,     //对cookie进行签名  防止用户修改cookie
          encrypt:true   //是否对cookie进行加密     如果cookie加密那么获取的时候要对cookie进行解密
      })

demo:

home.js控制器

'use strict';

const Controller = require('egg').Controller;

class HomeController extends Controller {
  async index() {    

      /*
      cookie:

        1.可以实现 同一个浏览器访问同一个域的时候 不同页面之间的数据共享


        2、实现数据的持久化  (关闭浏览器重新打开以后数据还存在)


      */

      /*
      
      第一个参数:cookies的名称

      第二个参数:cookies的值

      第三个参数:配置

      默认情况:cookies当浏览器关闭以后就销毁了
      */

      //  this.ctx.cookies.set('username','zhangsan');
 
      //注意:默认情况下面 egg.js里面的cookie没法设置中文    argument value is invalid (code: ERR_ASSERTION)

      // this.ctx.cookies.set('username','张三');
      this.ctx.cookies.set('key','value',{
          maxAge:1000*3600*24,  //cookie存储一天     设置过期时间后关闭浏览器重新打开cookie还存在
          httpOnly:true,
          signed:true,     //对cookie进行签名  防止用户修改cookie
          encrypt:true   //是否对cookie进行加密     如果cookie加密那么获取的时候要对cookie进行解密

      });
      // //如果cookie加密以后就可以设置中文cookie   (encrypt:true)
      // this.ctx.cookies.set("userinfo",'张三',{
      //     maxAge:1000*3600*24,  //cookie存储一天     设置过期时间后关闭浏览器重新打开cookie还存在
      //     httpOnly:true,
      //     signed:true,     //对cookie进行签名  防止用户修改cookie
      //     encrypt:true   //是否对cookie进行加密     如果cookie加密那么获取的时候要对cookie进行解密
      // })

     //cookies里面设置对象         JSON.stringify()          JSON.parse()
       await this.ctx.render('home');
  } 
}

module.exports = HomeController;
原文地址:https://www.cnblogs.com/loaderman/p/11547659.html