【问题标题】:Save the session directly to database bypassing the session store?绕过会话存储将会话直接保存到数据库?
【发布时间】:2019-10-17 11:12:47
【问题描述】:

我正在使用 SQL Server 作为数据库,但我无法让 SQL Server 工作列出的会话存储 npm 包。将 sessionID 直接插入数据库,然后验证客户端发送的 sessionID 与数据库 sessionID 匹配的内容是否存在任何问题?我是否需要以某种方式告诉它不要将会话保存在内存中?

const uuidv1 = require('uuid/v1');
const bcrypt = require('bcrypt');

app.use(session({
    genid: uuidv1,
    name: 'session',
    secret: 'thesecretcode',
    resave: false,
    saveUninitialized: false,
    cookie: {
        secure: false, /*no https*/
        httpOnly: true,
        sameSite: true,
        maxAge: 600
    }
}));

app.all('*', requireAuthentication);
function requireAuthentication(req, res, next) {
    console.log(req.sessionID);


    if (req.session.user) {
        req.session.views++;
        console.log(req.session.user)
        res.render('home'); /*when logged in*/

    } else {
        req.session.views = 1;
        req.session.user = 'MrUser';
        next();

    }
}

app.get('/', (req, res) => {
    const saltRounds = 10;
    bcrypt.hash(req.sessionID, saltRounds, function(err, hash) {
        let promise = insert(req.session.user, hash);

    });

    res.render('landing'); /*when not logged in*/
})

function insert(theuser, sessionID) {
    var thequery = "insert into session (sessiondata,sessionid,lasttouchedutc) values(@theuser,@sessionID,getdate())";
    return new Promise(function(resolve, reject) {
        var con = new msSqlConnecter.msSqlConnecter(config);
        con.connect().then(function() {
            new con.Request(thequery)
                .addParam("theuser", TYPES.VarChar, theuser)
                .addParam("sessionID", TYPES.VarChar, sessionID)
                .onComplate(function(count, datas) {
                    resolve(datas);
                    // res.end()
                }).onError(function(err) {
                    console.log(err);
                }).Run();
        }).catch(function(ex) {
            console.log(ex);
        });
    });

}

【问题讨论】:

    标签: node.js sql-server express session express-session


    【解决方案1】:

    使用 Redis 性能更高,但您所做的一切都很好。会话一直是通过将服务器端 cookie 值与通常存储在 RDBMS 中的值匹配来管理的。

    总结:

    1. 你做的很好。
    2. 使用 Redis 管理会话,因为它比访问 SQL 服务器或任何数据库要快得多

    【讨论】:

      猜你喜欢
      • 2021-10-11
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 2020-04-23
      • 2016-03-18
      • 1970-01-01
      • 2013-02-05
      • 2020-06-24
      相关资源
      最近更新 更多