Cookie

503 阅读2分钟
  1. cookie的保存地址和作用

    • cookie保存在浏览器客户端
    • 可以让我们用同一个浏览器访问同一个域名的时候共享数据
  2. 使用

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