【问题标题】:Maintaining a reliable session in express在 express 中保持可靠的会话
【发布时间】:2016-03-18 04:54:47
【问题描述】:

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

【问题讨论】:

标签: node.js session express


【解决方案1】:

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

此外,您可能希望查看 Json Web Token,因此您根本不必存储会话,而只需在数据库(或 redis)中保留对用户令牌的引用。这将使您可以轻松地在移动设备上进行身份验证。如果您将令牌存储在用户本地存储(而不是 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

【讨论】:

【解决方案2】:

我更喜欢使用名为“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;
})

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

【讨论】:

    猜你喜欢
    • 2019-05-18
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多