express中cookie-parser的实现原理

以前一直疑惑的浏览器中的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);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最近在研究express,学着使用cookie,开始不会用,就百度了一下,没有百度到特别完整的解答。查阅了expr...
    布拉德皮蛋_qzy阅读 11,134评论 1 3
  •   支持离线 Web 应用开发是 HTML5 的另一个重点。   所谓离线 Web 应用,就是在设备不能上网的情况...
    霜天晓阅读 4,781评论 0 2
  • 什么是 Cookie “cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就...
    小旭同志阅读 3,561评论 1 1
  • 什么是 Cookie “cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就...
    恩德_b0c2阅读 3,342评论 0 3
  • 黑黑的天空, 灰灰的机场, 一次又一次的降落和起航, 无法将脚步阻挡。 行走中的匆忙, 背上沉重的行囊, 换个落脚...
    秀秀王子阅读 1,265评论 0 0

友情链接更多精彩内容