2015-10-10 10 views
7

私がこれまでにstackoverflowの答えから、サーバーを再起動した後にセッションを永続化することについて検討しました。サーバーの再起動時にノードjに永続セッションを維持する方法は?

私の平均的なアプリケーションと考えている4つの方法があります。

が今私の疑問があればある接続-モンゴ/接続-Redisの

  • passport.jsを使用してJSONウェブトークン(JWT)https://www.npmjs.com/package/jsonwebtoken
  • を使用して

    1. クッキー、セッションhttps://www.npmjs.com/package/cookie-session
    2. 私はmongoとredisで自分のサーバーを再起動します。彼らは外部データストアであるため、セッションはまだそこにあります。 JWTセッションとCookieセッションを使用してセッションを永続化する方法 これらのセッション変数はどこに格納されていますか。

      passport.jsの場合は、私が出会った解決策は、セッションデータをconnect-mongo/connect-redisに保存することです。

      パスポートにセッションを永続化させる方法はありますか?

  • 答えて

    5

    セッションを外部ストレージに保存する場合は、再起動後にセッションを使用可能にする必要があります。

    パスポートはセッションの責任を負いません。エクスプレスでパスポートとは別にセッションを設定します。 Passportは、セッションを使用する戦略を備えた認証ミドルウェアです。 あなたのセットアップ特急セッション:

    app.use(express.session(session options)); 
    

    その後セッションを使用するinitとセットアップパスポート:

    app.use(passport.initialize()); 
    app.use(passport.session()); 
    

    にそれは関係なく、あなたがパスポートを使用するかどうかの、セッション構成は同じであることを意味し。

    セッションを永続化する方法はいくつかあります。 これらのセッションのほとんどは、セッションをdbまたはファイルシステムに格納しています(メモリの記憶域はdev envでのみ適切です)。このnpmの検索リストlinkを見てください。公式エクスプレス・セッションのページから互換性のあるセッションストアの

    一覧https://github.com/expressjs/session#compatible-session-stores

    JWTトークン、適切に実装されている場合、ステートレスです。これは、サーバーにセッションデータが格納されていないことを意味します。有効なセッション数はわかりません。それは、有効なjwtトークンを持っているかどうかを要求します。

    Jwtトークンには、ユーザーIDと同じように、いくつかのデータを保存できます。サーバーがトークンを受け取ると、サーバーはそれをデコードして検証し、このトークンからのデータにアクセスできます。詳細については、この記事をお読みください:

    https://stormpath.com/blog/jwt-the-right-way/

    最も重要な部分(より重要なことは、buttheseが時々忘れられている、があります):あなたがどんな情報を信頼する前に

    は必ず署名を検証しますJWT

    と:

    https://www.npmjs.com/package/json-web-token

    、あるいはいくつかのハイブリッドソリューションモジュール(JWTトークンとのRedisセッション)について:

    JWTを維持するためには、このモジュールを見てくださいJWT

    に機密データが含まれていません。

    https://www.npmjs.com/package/jwt-redis-session

    +0

    答えのためのおかげで、私はまた、memcachedをhttps://www.npmjs.com/package/memcachedについて聞いてきました私の質問は、memcachedはredisより速いですか?それはあなたがすべての長所と短所を検討することを提案するだろうか? – romir

    +0

    メモリストレージです。したがって、セッションのデータはより高速になるはずですが、セッションのデータは辛抱強くはありません。この答えを見てください(これはPHPについてですが、このケースは似ています)http://stackoverflow.com/a/13946349/4138339 –

    +0

    投稿を編集してこのリンクを追加します:https://github.com/expressjs/session#compatible -session-stores –

    関連する問題