【问题标题】:Cookies handling when client-side is also an ExpressJS app客户端也是 ExpressJS 应用程序时的 Cookie 处理
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 我想让会话在服务器中可用,即 ExpressJS 网络服务器,客户端也是 NodeJS/ExpressJS。浏览器 - 节点,节点会说“浏览器,保存一个 cookie,每次你打电话给我,把你的 cookie 发给我”,但现在没有浏览器。它是节点客户端 - 节点服务器。
  • “Node Client”是你写的,还是像request这样的库?看来您只需将正确的 cookie 发送到“节点服务器”应用程序。
  • 我的意思是一个节点应用程序。我正在使用请求,是的。我找到了一个方法,正是你说的。
猜你喜欢
  • 2013-03-10
  • 2011-05-06
  • 2019-10-09
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 2012-08-31
相关资源
最近更新 更多