当前位置: 首页 > 面试题库 >

节点应用之间的共享会话?

窦凯定
2023-03-14
问题内容

我目前在两个不同的端口上运行两个单独的节点应用程序,但是共享同一个后端数据存储。我需要在两个应用程序之间共享用户会话,以便当用户通过一个应用程序登录时,他们的会话可用,并且他们似乎登录了另一个应用程序。在这种情况下,它是面向公众的网站和管理后端。

我们的设置如下:

  • 快速节点
  • 护照正用于通过本地策略处理身份验证
  • 我们正在使用connect-redis来允许我们通过Redis共享会话。
  • 我们的域名如下:www.mydomain.com和adm.mydomain.com

两个应用程序的会话内容(和redis)配置相同:

session: {
    options: {
        secret: "my secret",
        cookie: {
            domain: "mydomain.com",
            maxAge:1000*60*60*24
        }
    },
    redis: {
        host: 'my host',
        maxAge: 86400000,
        secret: "my secret"
    }
}

app.js中会话内容的配置如下所示:

if ( app.settings.env === "production" ) {
    session.options.store = new RedisStore(session.redis);
}
app.use(express.session(session.options));
app.use(passport.initialize());
app.use(passport.session({ secret: 'a different secret' }));

我希望它能做什么 :允许我们在两个应用程序之间的cookie中看到相同的会话ID。

所以我的问题是 :如何设置快递,Redis和护照,以便可以在不同子域之间共享会话?


问题答案:

也许有些过时,但是在此时,Express-session可以识别cookie的域选项。根据消息来源:

function session(options){
  var options = options || {}
  //  name - previously "options.key"
    , name = options.name || options.key || 'connect.sid'
    , store = options.store || new MemoryStore
    , cookie = options.cookie || {}
      ...

这是用于设置cookie的:

var Cookie = module.exports = function Cookie(options) {
  this.path = '/';
  this.maxAge = null;
  this.httpOnly = true;
  if (options) merge(this, options);
  ...

因此,类似的方法适用于当前的1.10.1 master:

secret: "my secret",
    cookie: {
        domain: "mydomain.com",


 类似资料:
  • 问题内容: 我正在忙于建立一个包含3个不同子域的平台-example.com,auth.example.com和api.example.com。它们与在服务器的不同端口上运行的3个单独的NodeJS应用程序一起运行。 这是设置会话的代码: 这三个应用程序的配置完全相同,并且它们都位于同一台服务器上。由于某些原因,会话未共享。我似乎记得几周前就已经共享了它们,现在一切都坏了- 我偷偷地怀疑,当我们将

  • 问题内容: 是否有使用节点,表达和redis / predis共享PHPSESSID的最新指南(或示例代码)? 我发现有1-2年的一些教程,它们都使用旧版本的Express或不使用Express。 Express cookie解析器也已弃用。 https://simplapi.wordpress.com/2012/04/13/php-and-node-js-session-share- redi/

  • 问题内容: 我的公司接管了一些旧的php应用程序。由于我们偏爱ASP.net且由于以前的开发人员缺少任何文档,因此我们不想在PHP开发上花费大量资源。为了实现新功能,我们将创建一个Asp.net应用程序,其外观与用户相同。我们要开发一种“共存”的Web应用程序。因此,我们必须在PHP和Asp.net Web应用程序项目之间共享会话,因为现有的MySQL数据库涉及用户管理。 (例如,链接“ A”指向

  • 问题内容: 因此,我有一个包含3个APK /应用程序的应用程序。如何在应用之间共享数据库?我假设当前在应用程序之间不可见的原因是因为它们在不同的上下文中传递。 谢谢 问题答案: 来自Realm的基督徒。目前,您要问的内容确实不可行。正如其他人指出的那样,实际上只有两种方法。 1)公开一个ContentProvider。但是,这需要您将RealmResults映射到Cursor,这并非易事。我们正计

  • 我正在使用ActiveMQ客户端库将我的服务器应用程序连接到ActiveMQ。几个不同的消费者和生产者在单个线程中运行。、和之间的关系应该如何? 每个JVM一个连接工厂 每个JVM一个到代理的连接或n个连接,每个使用者一个 n个会话,每个消费者一个(Javadoc似乎强烈建议这样做)

  • 问题内容: 我想在一个应用程序和一个使用的应用程序之间共享服务器会话。我从这个要点中提取了大部分代码。 NodeJs代码: 它输出: PHP代码(我使用redis-session-php和Predis): 它输出: 问题: 我希望两个会话看起来都一样,但是却不一样(应用程序在同一域上运行)。使用from 作品设置值(但这些值不会在会话变量上)。我使用和找到了我认为可以工作的代码,但我认为这会使代码