20

ExpressandConnectミドルウェアを使用した完全に機能するユーザーサインアップ/認証システムを使用しています。

app.use(express.session({store: require('connect').session.MemoryStore( {reapInterval: 60000 * 10} ) }))

唯一の問題は、サーバーの再起動を実行するたびにセッションがドロップすることです。

https://github.com/remy/nodemon-そしてnodemonは、ファイルの変更を検出するたびにnode.jsを再起動します。

どうすれば永続的なセッションを行うことができますか?

4

5 に答える 5

24

あなたのコードがMemoryStoreを使用していることを示しているように。これは揮発性であり、再起動時にクリアされます。connect_redisを使用してセッションを永続化することをお勧めします。Redisは非常に高速なストアです。

  1. redisをダウンロード
  2. redisをコンパイルします:make
  3. サーバーを起動します。./redis-server
  4. npm install connect-redis
  5.  

    var connect = require('connect') , RedisStore = require('connect-redis');
    
    connect.createServer(
      connect.cookieParser(),
      // 5 minutes
      connect.session({ store: new RedisStore })
    );
    

これは、すぐに始められるようにするためのものです。redisを最大限に活用したい場合は、ドキュメントを読み、redisを設定する必要があります。

于 2011-03-12T23:27:55.117 に答える
14

express.jsを使用してRedisを軌道に乗せようとしていましたが、Googleからここに送られてきました。エクスプレスの実装が変更されました。

var express = require('express'),
RedisStore = require('connect-redis')(express);

もう1つの重要なことは、エクスプレス構成の順序です。

app.configure(function(){

    app.enable('strict routing'); // removes trailing slash
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jqtpl');
    app.register('.html', require('jqtpl').express);
    app.use(express.favicon());
    app.use(express.methodOverride());
    app.use(express.compiler({src: __dirname + '/public', enable: ['sass']}));
    app.use(express.static(__dirname + '/public'));
    app.use(app.router);
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.session({secret: _.config.secret, store: new RedisStore}));

});

cookieParser&セッション構成は、構成の最後に配置する必要があり、のcookieParser直前に配置する必要がありますexpress.session

それがお役に立てば幸いです。私はこれらの問題の両方に遭遇しました。

于 2011-11-10T23:13:52.497 に答える
8

redisについては皆さんの意見に賛成ですが、ソフトウェアのメンテナンスに関しては、技術の違いが問題だと思います。たとえば、mongodbを使用している場合はconnect-mongo(https://npmjs.org/package/connect-mongo)があり、mysqlを使用している場合はconnect-mysql(https://npmjs.org/package/connect )があります。 -mysql)、connect-couchdb for couchdb(https://npmjs.org/package/connect-couchdb)など。

于 2013-10-03T07:20:48.483 に答える
6

また、Expressを使用している場合は、アプリにredisミドルウェアを使用するように指示するときにシークレットを提供する必要があります。

したがって、上記のアルフレッドのレシピに従いますが、次のようにします...

var express = require( 'express' );
var RedisStore = require('connect-redis');

app.use( express.cookieParser() );
app.use( express.session( { secret: "keyboard cat", store: new RedisStore }));
于 2011-04-08T21:06:09.767 に答える
1

ノードが死ぬとき、私はあなたが使っているメモリストアが死ぬと想像します。

セッションをディスクに永続化しますか?

于 2011-03-12T22:53:52.677 に答える