最有可能的解決方案是微不足道的,但我一直沒有幸運與文檔。 我正在使用express-session中間件和connect-redis會話存儲,因此它將會話保留爲redis。node.js會話在redis刷新時未定義
當我用FLUSHALL
刷新redis後,會話信息當然不再可用。當我然後請求我的首頁時,會發送一個「old sid
」,其中表示會話在redis中找不到,並且我以未定義的方式結束req.session
。這在某種程度上是有道理的 - 因爲沒有會話信息 - 但我不知道如何正確處理。
讓我們更深入地思考;如果用戶在一週後沒有返回,我的下一步就是從商店中刪除舊的會話(以釋放隨機流量的空間)。所以在這個szenario中,當用戶在2周後回來時,我會遇到同樣的問題。
所以我的問題是,它爲什麼不創建一個新的會話,並發現一個新的SID cookie,當它沒有找到sessionstore中的任何東西?或者是一個更好的問題,而不是爲什麼,我該如何做到這一點?
req.session.regenerate()
將是顯而易見的方法,但由於req.session
是undefined
,沒有可用於任何洞察到這一情況做:(
感謝
/編輯:這是我的會話代碼;
var ExpressRedisStore = require('connect-redis')(express),
sessionStore = new ExpressRedisStore({
client:redClient
}),
app = express();
//... <- some middleware
app.use(express.bodyParser({hash : 'md5'}));
app.use(cookieParser);
app.use(express.session({
store: sessionStore,
key: "sid",
cookie:{
path: '/',
httpOnly: true,
maxAge: 3600*24*1000 //one day!
},
trustProxy:true,
rollingSessions:true
}));
app.use(userHandler.middleware()); //<-- my own middleware for userManagment
// here I fail because req.session is undefined
!
感謝您的回答,但快速會話是從連接回購鏈接(https://github.com/senchalabs/connect),因爲快遞是基於連接,我很確定這是你得到什麼時你做express.session。所以它已經是你提出的。你有另一個想法嗎? - >請參閱上面我的會話設置 – japrescott
請看我更新的答案。 – dankohn
我覺得我有問題,因爲模塊正在更新並在此刻發佈到npm。我明天再來看看。感謝您的更新。我會及時向大家發佈 – japrescott