我使用expressJS,我对会话有点困惑。我有一个单一的expressJS服务器,可以从不同的URL访问。根据连接来自frmo(打开哪个URL)的位置,使用不同的数据库来提供响应。我可以看到这些会话是相互冲突的。expressjs与路由器的会话处理
我的假设是我应该根据请求的URL设置不同的cookie名称,但似乎我不能在会话配置中指定一个函数。
任何想法?
var app = express();
var session = require('express-session');
var router = express.Router();
app.use('/a_route', router);
app.use('/b_route', router);
router.use(session({
genid: function(req) {
return require('crypto').randomBytes(48).toString('hex'); // use UUIDs for session IDs
},
secret: 'JollynakAjollynakAjollynakApamPam',
resave: false,
saveUninitialized: false,
name: **THIS SHOULD BE DYNAMIC BASED ON URL???**
}));
编辑
//declare session variable
var sess ="";
router.post('/login', function (req, res, next) {
sess = req.session;
var uname = req.body.username;
var pwd = req.body.password;
var authResult = null;
sess.username = uname;
sess.instance = req.baseUrl.replace('/', '');
})
和示例AJAX调用
router.get('/getSomething', function (req, res) {
service.getCaps(sess.instance, function (response) {
res.send(JSON.stringify(response));
});
});
我明白了,谢谢。你有建议如何得到一个解决方案,有一个“基础”的网址,例如:东西:3000,然后是:3000/a_route,东西:3000/b_route。其中的关键是我抓住baseUrl,并在配置文件中查找它,并决定连接哪个数据库。 – Ashton
如果它们位于相同的基本URL上,它们可能应共享同一个Cookie存储。你有什么理由不能这样做吗? – Harangue
不,你是对的,这个问题可能在别处。我发布了更多我的代码。基本上我有一个'sess'变量在所有内容之外声明,并且在登录过程中,在正确的数据库中查找之后,我添加一个'instance'属性。但是这会导致如果我使用ExampleUser1登录到3000/a_route,然后将ExampleUser2设置为3000/b_route,那么ExampleUser1发出的下一个AJAX调用将发送到b_route – Ashton