Най-вероятно решението е тривиално, но нямах късмет с документите. Използвам мидълуера express-session и connect-redis session-store, така че запазва сесията до redis.
След като изчистя redis с FLUSHALL
, информацията за сесията, разбира се, вече не е налична. Когато след това поискам началната си страница, се изпраща „стар sid
“, който експресната сесия не може да намери в redis и в крайна сметка req.session
е недефиниран. Това има смисъл до известна степен - тъй като няма информация за сесията - но не знам как да се справя с това правилно след това.
Нека помислим по-надолу по пътя; Следващата ми стъпка ще бъде да премахна стари сесии от магазина (за да освободя място за произволен трафик), ако потребителят не се върне след седмица. Така че в този сценарий бих имал същия проблем, когато потребител се върне след 2 седмици.
Така че въпросът ми е защо не създава нова сесия и не изпраща нова бисквитка на Sid, когато не намира нищо в sessionstore? Или по-добри въпроси вместо защо, как мога да постигна това?
req.session.regenerate()
би бил очевидният подход, но тъй като req.session
е undefined
, не може да се направи :(
Благодаря за всякаква представа за тази ситуация!
/edit: това е кодът на моята сесия;
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