Node.js服务器重新启动会丢弃会话

我正在使用快速和连接中间件function齐全的用户注册/身份validation系统。

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

唯一的问题是,每次执行服务器重新启动时会话都会丢失。

https://github.com/remy/nodemon – 并且nodemon每次检测到文件更改时都会重新启动node.js。

我怎样才能持久会议?

就像你的代码告诉你正在使用MemoryStore一样。 这是易失性的,并在重新启动时被清除。 我build议你使用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 }) ); 

这只是为了让你快速入门。 你应该阅读文档并configurationredis,如果你想从redis中获得最大收益。

我正在使用express.js让Redis走上正轨,Google把我送到了这里。 快速执行改变了:

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

另一个重要的事情是快速configuration的顺序。

 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 &会话configuration需要在configuration的最后, cookieParser必须放在express.session之前。

希望有帮助,我遇到了这两个问题。

我同意每个人对redis的看法,但是我认为不同的技术在软件维护方面是一个问题。 如果你使用mongodb,例如connect-mongo( https://npmjs.org/package/connect-mongo ),如果你使用的是mysql,那么connect-mysql( https://npmjs.org/package/connect -mysql ),couchdb的connect-couchdb( https://npmjs.org/package/connect-couchdb )等等。

另外,如果您使用快递,则需要在告知应用使用Redis中间件时提供秘密。

所以,按照阿尔弗雷德的食谱上面,但做以下…

 var express = require( 'express' ); var RedisStore = require('connect-redis'); app.use( express.cookieParser() ); app.use( express.session( { secret: "keyboard cat", store: new RedisStore })); 

当节点死亡时,我会想象你正在使用的内存存储器。

坚持会议到磁盘?