美文网首页
express中cookie-parser的实现原理

express中cookie-parser的实现原理

作者: Jason_Zeng | 来源:发表于2019-08-17 16:57 被阅读0次

    以前一直疑惑的浏览器中的cookie是怎么储存的,怎么用的,这次都可以通过下面参数来控制cookie的一些基本用法,本质上还是再http请求头里按照分号(;)来设置各种配置信息,浏览器读取控制cookie的功能

    简单的cookie-parser的源码如下

    const express = require("express");
    const cookieParser = require("cookie-parser");
    const app = express();
    
    app.use(cookieParser());
    app.get("/write",function(req,res) {
    
        // cookie-parser的解析原理
        res.cookie2 = function(key, value, options) {
            let { domain,path,expires,maxAge, secure, httpOnly } = options;
            let parts = [`${key}=${value}`];
            if (domain) { // 指定域名有效
                parts.push([`Domain=${domain}`]);
            }
            if (path) { // 哪个子路由下面有效
                parts.push([`Path=${path}`]);
            }
            if (expires) { // 绝对过期时间
                parts.push([`Expires=${expires.toUTCString()}`]);
            }
            if (maxAge) { // 相对过期时间
                parts.push([`Max-Age=${maxAge}`]);
            }
            if (httpOnly) { // 不允许客户端通过浏览器访问cookie
                parts.push([`httpOnly`]);
            }
            if (secure) { // 是否只能https访问
                parts.push([`Secure=${secure}`]);
            }
            let cookie = parts.join("; ");
            res.setHeader("Set-Cookie",cookie);
        }
    
        // 这个cookie方法是express提供的
        res.cookie2("name","jason", {
            domain: "localhost",
            httpOnly: true,
            maxAge: 20*1000,
            path: "/read2",
            expires: new Date(Date.now() + 20*1000)
        });
        res.end("write ok");
    });
    
    app.get("/read",function(req, res) {
        // 但是express却没有自己读取cookie的方法
        //  let cookie = req.headers["cookie"];
        // req.cookies : cookieParser的用途
        res.send(req.cookies);
        // res.end只能发射buffer和字符串
    });
    
    app.get("/read2",function(req, res) {
        // 但是express却没有自己读取cookie的方法
        //  let cookie = req.headers["cookie"];
        // req.cookies : cookieParser的用途
        res.send(req.cookies);
        // res.end只能发射buffer和字符串
    })
    
    app.listen(8080);
    

    相关文章

      网友评论

          本文标题:express中cookie-parser的实现原理

          本文链接:https://www.haomeiwen.com/subject/ugdksctx.html