就我而言,如果服务器端应用程序知道客户端正在与之通信,它将使用会话ID在客户端中保存cookie。
这确实是express-session
ExpressJS中流行的会话存储包在文档中所说的
注意会话数据不会保存在cookie本身中,只会保存在会话ID中。会话数据存储在服务器端。
所以我相信我可以假设这是Express使用的策略来维护会话中的用户数据。
我做了其他的事情:我正在使用Redis将Session数据存储在ExpressJS服务器应用程序中。
所以说,我的问题是我的客户端应用程序也是一个Express应用程序。我有一个带有Express的nodejs应用程序,用于客户端和服务器。有一个SPA涉及这个问题,但它与'快递客户'进行通信,所以它似乎是一个不同的问题。
因此,每当我从Express Client向Express Server发送请求时,都没有传递cookie,因此无法识别会话ID并创建新会话ID,从而在Redis中生成大量垃圾并使会话解决方案无效
我应该如何在Express Client应用程序中保存或伪造cookie,或者更好的是,如何解决这类问题?
实际上,如果我知道Express Server在请求中的期望(cookie,标题或其他),我想我可以解决问题。
任何人都知道该怎么做?
@Solved
好吧,所以,在我的nodejs客户端应用程序中,我做了以下事情:
login(req,res,next){
var options = {
url : 'http://localhost:8090/user/login_handler';
};
request(options, function(error,response,body) {
var cookie_string = response['headers']['set-cookie'][0].split(';')[0];
req.session.cookie_string = cookie_string;
});
}
check(req,res,next){
var options = {
url : 'http://localhost:8090/user/check_handler',
headers: {
'cookie':req.session.cookie_string
}
};
request(options, function(error,response,body){
res.json( body);
});
}
简而言之,当在服务器端创建会话时,它将使用标头响应以告知客户端创建cookie。我将重要信息保存为在不同时刻作为cookie传递。然后,服务器端读取中间件中的头文件并将更正数据加载到会话中。
答案 0 :(得分:0)
在不知道您的架构细节的情况下,我猜你想要的是将saveUnitialized
选项设置为false
,而不是保存无关会话,或仅应用{{1}中间件到“Express Server”应用程序中的某些路由