Sto utilizzando (quasi) con successo Node.js con Express e Redis per gestire le sessioni.Node.js - La sessione non persiste attraverso res.redirect()
Il problema che sto avendo è che la sessione non viene mantenuta quando utilizzo res.redirect()
.
Ecco come posso vederlo:
req.session.username = username.toString();
console.log(req.session);
res.redirect('/home');
Il console.log() stampa:
{ lastAccess: 1322579131762,
cookie:
{ path: '/',
httpOnly: true,
_expires: Tue, 29 Nov 2011 15:06:31 GMT,
originalMaxAge: 60000 },
username: 'admin' }
Ora, ecco il codice seguente:
app.get('/home', [app.requireLogin], function(req, res, next) {
// Not showing the rest as it's not even getting there
// Instead, here is what's interesting
app.requireLogin = function(req, res, next) {
console.log(req.session);
Questo console.log() stampa questo:
{ lastAccess: 1322579131775,
cookie:
{ path: '/',
httpOnly: true,
_expires: Tue, 29 Nov 2011 15:06:31 GMT,
originalMaxAge: 60000 } }
Chiaramente, l'oggetto "nome utente" è scomparso. La sessione non lo ha tenuto, e appena ricostruito uno nuovo.
Come posso risolvere questo? Non esitare se hai bisogno di informazioni.
Ecco il codice in cui ho impostato la gestione delle sessioni:
app.configure(function() {
// Defines the view folder and engine used.
this.set('views', path.join(__dirname, 'views'));
this.set('view engine', 'ejs');
// Allow parsing form data
this.use(express.bodyParser());
// Allow parsing cookies from request headers
this.use(express.cookieParser());
// Session management
this.use(express.session({
// Private crypting key
secret: 'keyboard cat',
store: new RedisStore,
cookie: {
maxAge: 60000
}
}));
this.use(app.router);
});
Ecco l'intero progetto (voglio dire, parte di esso), il succo: https://gist.github.com/c8ed0f2cc858942c4c3b (ignorare le proprietà delle viste renderizzate)
È possibile incollare anche il codice in cui si include lo store di sessione Redis? C'è un'opzione di timeout, forse l'hai accidentalmente impostata troppo bassa. – alessioalex
Aggiunto :) È impostato su 60 secondi, e chiaramente non uso 60 secondi per scrivere le credenziali ... –
Presumo che questo sia un piccolo progetto, penso sia meglio postarlo da qualche parte (gist, pastie) e dare un collegamento. Scommetto che l'errore è in qualche modo in un codice che non stai incollando. (solo un'ipotesi) – alessioalex