-
cookie的保存地址和作用cookie保存在浏览器客户端- 可以让我们用同一个浏览器访问同一个域名的时候共享数据
-
使用
const Koa = require("koa"); const app = new Koa(); const router = require("koa-router")(); //示例 设置cookie 这个写在监听接口的中间件内部 ctx.cookies.set("名称key", "值value", { maxAge: number 数字 毫秒数, //常用 表示过期时间,在这个时间过后,这个cookie就回过期被回收 expires: 过期时间 是一个date, //不常用,越是设置过期时间的 path: 路径, //不常用 在这个路径下才可以访问当前这个cookie domain: 域名, //不常用 只有这域名范围内才能访问这个cookie secure: 安全设值 默认false, //不常用 设置成true 只有https可以访问 httpOnly: 是否只是服务器可以访问 默认为false,//不常用 默认时 服务器 和客户端 都可以访问 为true 时 只有服务器可以访问 }) //访问cookie ctx.cookies.get("名称key") app.use(async (ctx) => { //设置cookie 当然所有的路由内部都是可以进行访问的 因为就直接挂载在ctx 变量上 ctx.cookies.set("token123", "123", { maxAge: 60 * 1000 * 60 }) }) router.get("/news", async (ctx) => { ctx.body = ctx.cookies.get("token123") }) app.listen(3000, () => { //启动成功 }); app.use(router.routes()); app.use(router.allowedMethods());注意
ctx.cookies.set()无法设置中文的值,如果值是中文,会报错,不知道是不是bug 但是有解决方案//解决方案 就是利用node自带的Buffer功能,将中文转换为base64 然后再讲base64转回中文就可以了 //接上面的代码 app.use(async ( ctx ) => { //利用 new Buffer() 将中文转换为base64编码 let info = new Buffer("我是中文").toString("base64"); ctx.cookies.set("zhognwen", info, { maxAge: 60 * 1000 }) }) router.get("/content", async (ctx) => { //再次利用new Buffer() 将base64编码的数据 转为中文 就可以了 let info = new Buffer(ctx.cookies.get("zhongwen"), "base64").toString(); ctx.body = info; })