我使用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