Экспресс-сессия Node.js перезаписывается другой параллельной сессией - PullRequest
0 голосов
/ 08 ноября 2018

Мы используем библиотеку экспресс-сессии для обработки запросов. Сессия иногда перезаписывается другой параллельной сессией.

Например, Клиент A получает доступ к нашему приложению и генерирует Session # A . После этого другой Клиент B создает Session # B . Затем клиент A обновляет то же приложение и обнаруживает, что его сеанс изменяется как Session #B. Другими словами, сессия #A была заменена на сессию # B.

У кого-нибудь есть опыт решения аналогичной проблемы?

Часть моего исходного кода прилагается ниже: написано на TypeScript. Конфигурация сеанса определена в sess.ts . Я использую магазин express-oracle-session .

sess.ts

exports.configSession = () => {
  let oracledb = require('oracledb');
  let session = require('express-session');
  let oracleDbStore = require('express-oracle-session')(session);
  let sessOpts = {
    checkExpirationInterval: 60000,
    createDatabaseTable: true,
    schema: {
        tableName: 'ldap_sessions'
    }
};

return new Promise((resolve, reject) => {
    oracledb.getConnection('oracle_db', (err, conn) => {
        if (err) {
            return reject(err.message);
        }
        let sessionStore = new oracleDbStore(sessOpts, conn);
        let sessConfig = {
            secret: 'ldap secret',
            resave: true,
            saveUninitialized: true, 
            rolling: true, 
            cookie : {
                httpOnly: false,
                maxAge: 1000 * 60 * 60 * 24
            store: sessionStore
        };
        return resolve(session(sessConfig));}
    )});
* +1025 *};

server.ts

let configSess = require('./sess');
let cookieParser = require('cookie-parser');
let bodyParser = require('body-parser');

configSess.configSession().then((sess) => {
    app.use(sess);
    startServer();
});

1 Ответ

0 голосов
/ 08 ноября 2018

Ну, вы говорите, что используете экспресс-сессию. Это использует куки в браузере для отслеживания клиентов. Таким образом, единственный способ, которым я знаю о том, что клиент A и клиент B перепутывают свои сеансы, это если они находятся в одном браузере. Если так, то это работает как задумано. Каждый браузер получает один сеанс. Если вы создаете сеанс в одном окне, а затем создаете другой сеанс в другом окне, файл cookie для второго сеанса перезапишет файл cookie из первого окна, а обновление во втором окне выполнит второй сеанс. Так работает экспресс-сессия.

Если вы не используете один и тот же браузер для обоих клиентов, значит, в реализации экспресс-сессии на вашем сервере что-то серьезно не так, и мы должны увидеть ваш серверный код, чтобы помочь вам в этом.

Если вы хотите иметь два отдельных сеанса в одном браузере для отдельных целей (например, один для входа администратора и один для входа пользователя), вы можете увидеть здесь: как управлять несколькими сессиями в экспресс js . Но это не так, что у вас может быть два отдельных клиента, каждый с одним и тем же типом сеанса, и отдельные сеансы, работающие в одном браузере. Я не думаю, что это то, что поддерживает экспресс-сессия. Чтобы сделать это, вам, вероятно, придется использовать что-то кроме куки для отслеживания сеансовых ключей (возможно, старый ?sessionid=xxxxx в каждом URL, но у него есть свой собственный набор проблем, поэтому он редко используется больше) .

...