当客户端也是ExpressJS应用程序时,Cookie处理

时间:2016-12-27 19:41:30

标签: node.js session express redis session-cookies

就我而言,如果服务器端应用程序知道客户端正在与之通信,它将使用会话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传递。然后,服务器端读取中间件中的头文件并将更正数据加载到会话中。

1 个答案:

答案 0 :(得分:0)

在不知道您的架构细节的情况下,我猜你想要的是将saveUnitialized选项设置为false,而不是保存无关会话,或仅应用{{1}中间件到“Express Server”应用程序中的某些路由