2014-04-02 76 views
3

当用户登录时,我在会话存储数据是这样的:如何在expressjs中将会话数据存储在文件中?

req.session.user = userData; 

它工作正常,但是当我在重新启动的NodeJS,会话为空。然后用户需要再次登录。

我想了很多搜索后创建session.But基于文件的存储,我得到存储在数据库中的数据的方式,但我不想会话数据存储在数据库中。我想将数据存储在文件中。

是否有一个模块的NodeJS的会话数据存储在文件?

+0

文件系统不是存储会话数据的最佳位置。考虑使用一些快速键值存储(例如[Redis](https://github.com/tj/connect-redis))或至少一个数据库(例如[MongoDB](https://github.com/kcbanner) /连接-蒙戈))。 –

回答

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')); 
}); 
+2

可能会有更多的新版本明确的问题,这一点,因为中间件已经分拆&这是很老的包。我目前正在尝试https://www.npmjs.com/package/session-file-store – dpjanes

-2

它不是一个好主意,在文件中写会话数据,因为你需要存储为键,值对并且必须解析它。如果用户注销,您需要从文件中删除特定的会话(否则文件可能会从内存中删除)

您说,您已将会话数据存储在数据库中,您需要添加其他状态信息作为db中的键值对。当用户终止SEESION或会话超时该状态只能成为假的,否则即使处于这种状态,服务器restart.with参考,你可以保持用户仍是如此。

+1

这不是一个答案 – EaterOfCode

+0

有它的用例:例如:在开发中,我不想旋转一个数据库,但想要在服务器重新加载时保持会话。 –

1

您可以使用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); 
});