当用户登录时,我在会话中存储数据:
req.session.user = userData;
它工作正常但是当我在nodejs中重启时,会话为空。然后用户需要再次登录。
我想为session创建一个基于文件的存储。但经过大量搜索后,我得到了将数据存储在数据库中的方法,但我不想将会话数据存储在数据库中。我想将数据存储在文件中。
是否有nodejs模块将会话数据存储在文件中?
答案 0 :(得分:5)
您可以尝试connect-fs2。
var FSStore = require('connect-fs2')(express);
var options = { dir='./mySessionFolder' }; // specify your directory to store your session files
app.configure(function() {
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({
store: new FSStore(options), // use it as your store
secret: 'your secret',
cookie: { maxAge: 7 * 24 * 60 * 60 * 1000 } // 1 week
}));
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
答案 1 :(得分:3)
您可以使用session-file-store
。可以参考下面的工作实例。
var express = require('express');
var app = express();
var session = require('express-session');
var FileStore = require('session-file-store')(session);
app.use(session({ secret: 'keyboard cat',
resave: false,
saveUninitialized: false,
store: new FileStore,
cookie: { maxAge: 3600000,secure: false, httpOnly: true }
})
);
app.get('/', function (req, res) {
if (req.session.views) {
req.session.views++;
res.setHeader('Content-Type', 'text/html');
res.write('<p>views: ' + req.session.views + '</p>');
res.end();
} else {
req.session.views = 1;
res.end('Welcome to the file session demo. Refresh page!');
}
});
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
答案 2 :(得分:-3)
在文件中编写会话数据不是一个好主意,因为你需要存储为键,值对并且必须解析它。如果用户注销,则需要从文件中删除特定会话(否则文件可能会内存不足)
你说,你已经在db中存储了会话数据,你需要在db中添加其他状态信息作为键值对。只有当用户终止了一个或多个会话超时时,该状态才会变为false,否则即使服务器重新启动它仍然是正确的。带有此状态的引用可以保存用户。