如何在expressjs文件中存储会话数据?

raj*_*war 3 session node.js express

当用户登录时,我将数据存储在会话中,如下所示:

   req.session.user = userData;
Run Code Online (Sandbox Code Playgroud)

并且它工作正常,但是当我在nodejs中重新启动时,会话为空.然后用户需要再次登录.

我想为session创建一个基于文件的存储.但经过大量搜索后,我得到了将数据存储在数据库中的方法,但我不想将会话数据存储在数据库中.我想将数据存储在文件中.

是否有nodejs模块将会话数据存储在文件中?

Kis*_*dev 10

您可以使用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);
});
Run Code Online (Sandbox Code Playgroud)


aia*_*tag 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'));
});
Run Code Online (Sandbox Code Playgroud)

  • 在最近的Express版本中可能会出现问题,因为中间件已被拆分并且这是非常旧的包.我正在尝试https://www.npmjs.com/package/session-file-store (3认同)