以前一直疑惑的浏览器中的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);
网友评论