NodeJS 请求重置会话
NodeJS request reset session
我正在执行从我的服务器到另一台服务器的 post 请求,为此我正在使用库 https://github.com/request/request。
所以,我使用下一个代码:
router.post('/extern/*', function(req, res, next) {
var path = req.params['0'];
var input = req.body.text;
var encript = crypto.encrypt(input);
request.post(config.petitionServer + path).form({data: encript}).pipe(res)
});
会话在调用这个post之前已经初始化,但是当它执行时,会话被重置。因此,在这种情况下,我丢失了会话变量中的 csrf 代码。
错误在 'pipe' 函数中,因为如果我调用它,我会丢失会话,在其他情况下不会,但我需要使用它。
如何在不丢失实际会话的情况下使用管道功能?
我相信 express-session 正在将其会话保存到 cookie 中,而您正在做的是将空洞响应从 config.petitionServer + path
传输到客户端,以便它覆盖 express-session 保存的 cookie。也许只是通过管道传递响应的主体会更好?
router.post('/extern/*', function(req, res, next) {
var path = req.params['0'];
var input = req.body.text;
var encript = crypto.encrypt(input);
request.post({url: config.petitionServer + path, formData: {data: encript}, function(err, httpResponse, body))
res.send(body);
});
我创建了解决方案,但这是我的错。
会话在 req.session
中,请愿服务器也在使用 express-session 模块。当请愿服务器收到请求时,这个服务器用请愿服务器之一替换了会话变量。
解决方案是从请愿服务器中删除 express-session 模块。
另一种解决方案是从主机服务器管理会话以防止替换它。但是我没有做
如其他答案中所述,您的快递 session 正在被从其他服务器发送的 cookie 重置。
有几种方法可以解决这个问题。如果您不需要请愿服务器中的 cookie,您可以在传输响应之前删除 header:
router.post('/myServerUrl', function(req, res) {
request.post('/remoteServerUrl', { data })
.on('response', function(response) {
delete response.headers['set-cookie'];
})
.pipe(res);
});
如果您不想修改任何 header,您应该能够将响应与内容类型一起通过管道传输到响应处理程序中。
router.post('/myServerUrl', function(req, res) {
request.post('/remoteServerUrl', { data })
.on('response', function(response) {
res.set('Content-Type', 'image/jpeg')
response.pipe(res);
});
});
我正在执行从我的服务器到另一台服务器的 post 请求,为此我正在使用库 https://github.com/request/request。
所以,我使用下一个代码:
router.post('/extern/*', function(req, res, next) {
var path = req.params['0'];
var input = req.body.text;
var encript = crypto.encrypt(input);
request.post(config.petitionServer + path).form({data: encript}).pipe(res)
});
会话在调用这个post之前已经初始化,但是当它执行时,会话被重置。因此,在这种情况下,我丢失了会话变量中的 csrf 代码。
错误在 'pipe' 函数中,因为如果我调用它,我会丢失会话,在其他情况下不会,但我需要使用它。
如何在不丢失实际会话的情况下使用管道功能?
我相信 express-session 正在将其会话保存到 cookie 中,而您正在做的是将空洞响应从 config.petitionServer + path
传输到客户端,以便它覆盖 express-session 保存的 cookie。也许只是通过管道传递响应的主体会更好?
router.post('/extern/*', function(req, res, next) {
var path = req.params['0'];
var input = req.body.text;
var encript = crypto.encrypt(input);
request.post({url: config.petitionServer + path, formData: {data: encript}, function(err, httpResponse, body))
res.send(body);
});
我创建了解决方案,但这是我的错。
会话在 req.session
中,请愿服务器也在使用 express-session 模块。当请愿服务器收到请求时,这个服务器用请愿服务器之一替换了会话变量。
解决方案是从请愿服务器中删除 express-session 模块。
另一种解决方案是从主机服务器管理会话以防止替换它。但是我没有做
如其他答案中所述,您的快递 session 正在被从其他服务器发送的 cookie 重置。
有几种方法可以解决这个问题。如果您不需要请愿服务器中的 cookie,您可以在传输响应之前删除 header:
router.post('/myServerUrl', function(req, res) {
request.post('/remoteServerUrl', { data })
.on('response', function(response) {
delete response.headers['set-cookie'];
})
.pipe(res);
});
如果您不想修改任何 header,您应该能够将响应与内容类型一起通过管道传输到响应处理程序中。
router.post('/myServerUrl', function(req, res) {
request.post('/remoteServerUrl', { data })
.on('response', function(response) {
res.set('Content-Type', 'image/jpeg')
response.pipe(res);
});
});