【发布时间】:2018-11-09 02:52:41
【问题描述】:
我们使用 express-session 库来处理请求会话。一个会话有时会被另一个并行会话覆盖。
例如,Client A 访问我们的应用并生成 Session #A。之后,另一个 Client B 创建 Session #B。然后客户端 A 刷新同一个应用程序,发现它的会话被更改为会话 #B。换言之,Session #A 已被 Session #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));}
)});
};
server.ts
let configSess = require('./sess');
let cookieParser = require('cookie-parser');
let bodyParser = require('body-parser');
configSess.configSession().then((sess) => {
app.use(sess);
startServer();
});
【问题讨论】: