13

複数の異なるドメインからアプリにアクセスできる状況があります。たとえば、理論上はfoo.combar.comの両方が私のアプリを指している可能性があります。さらに、サブドメインも私のアプリを指すことができるので、たとえばred.foo.comblue.foo.com . Express Cookie セッションを使用しています。セッションの初期化コードは次のようになります。

app.use(express.session({
    secret: "secret",
    cookie: {
        domain: ".foo.com"
    },
    store: new MongoStore({
        db: db
    })
}));

これは、ユーザーがfoo.comまたはそのサブドメインのいずれかを通過する場合にはうまく機能しますが、 bar.comは機能しません。私は両方を一度に持つ必要があります。リクエストごとに別のドメインに設定するのが理想的ですが、どうすればよいかわかりません。私のリクエストは非常に非同期であり、リクエストごとにアプリ全体に設定すると、一度に 2 つの呼び出しが入ったときに機能しないのではないかと心配しています。

これはまったく可能ですか?これを解決するアイデアはありますか?

4

1 に答える 1

20

行うことは次のとおりです。

  • アプリがデフォルトの express.session ミドルウェアの代わりに使用できるミドルウェアを作成する
  • そのミドルウェアで、リクエスト ヘッダーに基づいて、hostドメインごとにエクスプレス セッション ミドルウェアのインスタンスをインスタンス化して構成し、このリクエストに適したミドルウェア関数を実際に実行します。

疑似コード

var mwCache = Object.create(null);
function virtualHostSession(req, res, next) {
  var host = req.get('host'); //maybe normalize with toLowerCase etc
  var hostSession = mwCache[host];
  if (!hostSession) {
    hostSession = mwCache[host] = express.session(..config for this host...);
  }
  hostSession(req, res, next);
  //don't need to call next since hostSession will do it for you
}

app.use(virtualHostSession);

私のリクエストは非常に非同期であり、リクエストごとにアプリ全体に設定すると、一度に 2 つの呼び出しが入ったときに機能しないのではないかと心配しています。

そんなことは絶対にできません。それは完全に間違っているでしょう。

于 2013-09-30T22:30:33.317 に答える