我最近在node.js中为Muneem Web框架编写了一个会话管理插件。这是创建新会话的伪代码;
function createSession(){
// read encrypted session-id from the request
if( sessionId ){
// decrypt it
if (decryptedSessionId ) {
//read session detail from the store
options.store.get(decryptedSessionId, (err, sessionFromStore) => {
if(err){
throw Error(err);
}else if( sessionFromStore){
if( shouldRenew(sessionFromStore) ){
//delete previous session
options.store.destroy(sessionFromStore.id, err=> {
//update the session object in memory
});
}
}else{ //session detail is not present in store
// create new session
}
});
} else { //invalid or tempered session
// throw error
}
}else{ //session-id is not presnet in request
// create new session
}
}
您会注意到,我将通过删除上一个会话来更新一个有效且满足某些条件的会话。但是我不会立即在商店中更新它。相反,我将更新存储中的会话信息,并在将响应发送到客户端时设置cookie。
现在假设一个条件,即服务器收到具有相同会话ID且可以续约的多个请求。我根据第一个请求续订会话。
场景
如何处理这种比赛情况?
Here是完整的代码,以备不时之需。
答案 0 :(得分:0)
如果仅对主路径进行身份验证,则似乎不会发生这种情况。
我以前曾想对每个请求进行身份验证。服务器仅在页面加载时才能接收具有相同会话ID的多个请求,这包括对主路由的访问以及CSS,JS等静态文件。不需要验证静态文件。因此,不应出现种族状况。