在明确

时间:2015-12-12 08:15:41

标签: node.js session express

我正在使用Nodejs和express来创建一个Web应用程序。但我发现维持会话有些困难。我可以使用req.session.userid = userid,但它不太可靠。如果服务器停机一段时间而且必须重新启动,会话将会丢失..有没有办法更有效地存储会话?

2 个答案:

答案 0 :(得分:2)

您可以使用上述数据库,也可以使用内存存储,例如redis。 Redis是处理用户会话时的首选方式,因为它的几个因素比从磁盘读取更快。

此外,您可能希望查看Json Web Token,因此您根本不需要存储会话,而只需在数据库(或redis)中保留对用户令牌的引用。这样您就可以在移动设备上轻松进行身份验证。如果将令牌存储在用户localstorage(而不是cookie)上,它还可以帮助防止csrf攻击

您可以在此处阅读相关内容:https://scotch.io/tutorials/the-ins-and-outs-of-token-based-authenticationhttps://scotch.io/tutorials/the-anatomy-of-a-json-web-tokenhttps://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens

答案 1 :(得分:1)

我更喜欢使用名为“connect-mongodb-session”的npm模块。它使用mongodb来存储所有会话。转到项目目录并使用

安装“connect-mongodb-session”
  

sudo npm install connect-mongodb-session

并将其作为依赖项添加到package.json中。这就是你如何使用它..

示例代码......

var express = require('express');
var session = require('express-session');
var MongoDBStore = require('connect-mongodb-session')(session);

var app = express();
var store = new MongoDBStore({ 
    uri: 'mongodb://localhost:27017/connect_mongodb_session_test',
    collection: 'mySessions'
});

// Catch errors 
store.on('error', function(error) {
    assert.ifError(error);
    assert.ok(false);
});

app.use(require('express-session')({
    secret: 'This is a secret',
    cookie: {
        maxAge: 1000 * 60 * 60 * 24 * 7 // 1 week 
    },
    store: store
}));

server = app.listen(3000);

你很高兴..你想要的时候使用req.session,你的存储将被保存在mongodb中。

例如..

app.post("/login",function(req,res){
    //validate login
    req.session.userid = userid;
})

即使服务器必须重启,您的会话也不会丢失。