gpt4 book ai didi

javascript - 如何解码使用 Connect 的 cookieSession 设置的 cookie secret ?

转载 作者:搜寻专家 更新时间:2023-10-31 23:43:47 24 4
gpt4 key购买 nike

我正在使用 Connect 的 cookieSession() 设置 cookie。这似乎加密了 cookie 的 secret 值,返回类似 's:j:{}.8gxCu7lVJHVs1gYRPFDAodK3+qPihh9G3BcXIIoQBhM'

如何解密 cookie 的值?

示例代码:

app.use(express.bodyParser());
app.use(express.cookieParser());

app.get('/setcookie', function(req, res, next){
res.app.use(express.cookieSession({ key: "test", secret: "test" }));
console.log(req.cookies.test);
res.end();
});

app.get('/', function(req, res, next){
console.log(req.cookies.test);
res.end();
});

最佳答案

嗯……您似乎对 cookie session 的使用有点困惑。

  1. 您的 /setcookie 路径没有设置任何 cookie/session 值。要使用 cookie session ,您需要在 req.session 上设置一些值,例如 req.session.message = "Hi there!" 这些值现在存储在cookie。

  2. 您不能只在一个回调中res.app.use(),这样请求 session 在其他任何地方都不起作用。要在另一个请求中读取这些 cookie,请将 app.use(express.cookieSession({ key: "test", secret: "test"})); 放在应用程序级别。

编辑:实际上我已经考虑过你的 res.app.use() 调用,它可能会破坏你的应用程序/通过向你的应用程序添加越来越多的中间件层 (cookieSession) 导致内存泄漏,每次有人请求 /setcookie。如果只想在特定的请求中添加cookieSession中间件,需要做如下操作:

yourParser = express.cookieSession({ key: "test", secret: "test" });
app.get('/', yourParser, ...);
app.get('/setcookie', yourParser, ...);

解决方案

这是实际的固定来源:

app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.cookieSession({ key: "test", secret: "test" }));

app.get('/setcookie', function(req, res, next){
req.session.message = "Hellau there";
res.end();
});

现在检查这些值,在 app.get('/',...) 中试试这个:

app.get('/', function(req, res, next){
console.log(req.session); //Yay, this will be available in all requests!
res.end();
});

调试

要回答如何手动解码存储在 cookie 中的内容的问题,请查看 connect/lib/middleware/cookieSession.js:

// cookieParser secret
if (!options.secret && req.secret) {
req.session = req.signedCookies[key] || {};
} else {
// TODO: refactor
var rawCookie = req.cookies[key];
if (rawCookie) {
var unsigned = utils.parseSignedCookie(rawCookie, secret);
if (unsigned) {
var originalHash = crc16(unsigned);
req.session = utils.parseJSONCookie(unsigned) || {};
}
}
}

它需要 req.cookies[key](基本上是您已经在做的事情(req.cookies.test)),将其弹出到 utils .parseSignedCookie 并将其弹出到 utils.parseJSONCookie 中。

我把你的原始 cookie 字符串放在最后的 utils.js 文件中:

var signed = exports.parseSignedCookie(
's:j:{}.8gxCu7lVJHVs1gYRPFDAodK3+qPihh9G3BcXIIoQBhM'
, 'test');
var parsed = exports.parseJSONCookie(signed);
console.log(parsed);

然后运行它。猜猜我得到了什么:

{}

为什么?因为您从未在 req.session 对象上设置任何内容。 :)

关于javascript - 如何解码使用 Connect 的 cookieSession 设置的 cookie secret ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11709991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com