【发布时间】:2017-05-12 02:22:22
【问题描述】:
就我而言,为了让服务器端应用程序知道客户端与它通信的内容,它会在客户端中保存一个带有会话 ID 的 cookie。
这确实是 express-session ExpressJS 中一个流行的会话存储包在文档中所说的
注意会话数据不保存在 cookie 本身中,只是会话 ID。会话数据存储在服务器端。
所以我相信我可以假设这也是 Express 用来在会话中维护用户数据的策略。
我做了其他事情:我正在使用 Redis 将 Session 数据存储在我的 ExpressJS 服务器应用程序中。
话虽如此,我的问题是我的客户端应用程序也是一个 Express 应用程序。我有一个用于客户端和服务器的带有 Express 的 nodejs 应用程序。此问题涉及一个 SPA,但它与“快速客户端”通信,因此它似乎是一个不同的问题。
所以每次我从 Express Client 向 Express Server 发送请求时,都没有传递 cookie,所以它无法识别会话 ID 并创建一个新的,在 Redis 中产生大量垃圾,使会话解决方案无用.
我应该如何在 Express Client 应用中保存或伪造 cookie,或者更好的是,如何解决此类问题?
实际上,如果我知道 Express 服务器在请求中期望什么(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);
});
}
简而言之,当在服务器端创建会话时,它会以 headers 响应告诉客户端创建一个 cookie。我保存重要信息以在不同的时刻作为 cookie 传递。然后服务器端读取中间件中的标头并将正确的数据加载到会话中。
【问题讨论】:
-
我不确定我是否理解您要完成的工作。如果您不向“Express Server”应用发送 cookie,为什么要使用
express-session模块?
标签: node.js session express redis session-cookies