有什麼方法可以控制會話何時以連接的會話中間件開始?控制會話以快遞和連接中間件開始
舉例來說,如果我有明確的應用程序配置:
var app = express();
app.configure(function(){
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('secret'));
app.use(express.session({ store:sessionStore, ... }));
});
然後在每要求,如果沒有會話cookie,給出一個會話開始。如果我想僅在用戶通過身份驗證時纔開始會話,該怎麼辦?
例如,假設我有兩條路線/protected
和/login
。
- 如果有人打
/protected
沒有一個會話cookie,中間件將不啓動新的會話。 (req.session
是null
) - 如果有人打
/protected
用會話cookie,中間件將CHECK,看是否有匹配的活動會話的cookie,並設置req.session
,但不啓動新的會話。 (req.session
可以有一個值,或者是null
) - 如果有人打
/login
用正確的參數,可以再一個會話開始明確和cookie設置才。
啓動一個會話應該是明確的唯一方法:
app.post('/login', function(req, res, next) {
// connect to database and validate user...
db.authenticate(req.body.user, req.body.pass, function(allow) {
if (allow) {
// START SESSION HERE
// this will send set the cookie
}
});
}
是否存在與現有的連接會話中間件實現這一點的方法嗎?
如果您正在使用後備數據庫會話存儲,然後*每個*匿名用戶將創建存儲在數據庫中的會話。 – ralouphie
我明白,但是不管怎樣,你都不應該永遠保持會話數據。當會話數據過期時,應該刪除它,並且如果匿名用戶只訪問您網站上的幾個頁面,應該在他們離開後相當快地刪除。同樣,匿名用戶的會話基本上是空對象(如果我錯了,請糾正我),因此不應該是一個巨大的內存負擔。 –
會話中間件的工作方式,它將爲每個用戶創建一個會話(沒有cookie)。 這意味着數據庫將爲每個不發送cookie的請求輸入一個條目。在我正在研究的系統中,這是不可接受的。 – ralouphie