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是一个非常快速的商店。
- 下载redis
- 编译redis:
make
- 启动服务器:
./redis-server
-
npm install connect-redis
-
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 }));
当节点死亡时,我会想象你正在使用的内存存储器。
坚持会议到磁盘?
- Node.js https在Cloud9中不起作用
- 如何在Grunt中closures连接服务器?
- 传递res.end()作为callback不起作用的Nodejs
- 如何使用express.js在Ajax调用中实现CSRF保护(查找完整示例)?
- 我如何设置每个会话的默认variables
- 有人可以解释这一点:EventEmitter导致全局variables时失败
- 我如何避免node.js中的竞争条件,当我通过socket.io操纵会话?
- 实时重新加载失败 – 无法加载资源:net :: ERR_CONNECTION_REFUSED
- 如何让Stylus在CoffeeScript中使用Express和Connect工作