1、Cookie 简介 ●
● HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页 面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何 关系的。
2、Egg.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
3、Egg.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 });
4、Egg.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;