Je suis (presque) à l'aide de Node.js avec Express et Redis pour gérer des sessions.
Le problème que je vais avoir est que la session n'est pas conservée lorsque j'utilise res.redirect () .
Hère est comment je peux le voir: p> la console.log () Imprime: P> 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);
});
5 Réponses :
Votre code semble assez solide, mais y a-t-il une raison pour laquelle vous utilisez client.end ()? Il ferme de force la connexion Redis et n'est pas propre. Je ne pense pas que vous en ayez besoin du tout: P>
https://github.com/mrananney/node_redis/issues/74 < / p>
Je ne suis pas sûr de l'architecture sous-jacente pour Connect-Redis, mais je me demande si appeler client.end est ce qui réinitialisait vos sessions. Que se passe-t-il si vous les prenez? P>
Merci, je ne le savais pas. Je pensais que ce serait plus propre. Cela ne résout pas le problème, mais je suis + 1 'vous :)
Vous devez sûrement économiser cette session d'une manière ou d'une autre, cela pourrait fonctionner.
req.session.regenerate(function(){ req.session.username = username.toString(); res.redirect('/home'); });
Cela ne change rien, malheureusement. Au fait, quel est le point de cette fonction régénérée?
Si vous allez modifier les données stockées dans une base de données persistante, il est logique que vous aurez besoin de Enregistrer i> il avant de pouvoir l'utiliser dans d'autres parties de votre système. Je suis surpris que req.session.Ausername variable persiste sans i> sauver quoi que ce soit ... peut-être que cela se fait automatiquement comme une fonctionnalité
Avez-vous essayé avec différents navigateurs? Conservez-vous le même identifiant de session entre les redirections de page? P>
Vous pouvez ajouter req.session.cookie.expires = false; code> avant de rediriger ... p>
D'accord, j'ai trouvé la solution. Le problème est que l'heure dans Le problème était le suivant: J'utilise une machine virtuelle pour tester node.js, et vous savez ... Parfois, vous suspendez votre machine. P>
Eh bien, que s'est-il passé, c'est que le temps de la machine était de deux jours de retard. Donc, chaque fois que le cookie était défini sur le serveur, le côté du client a jugé que le cookie était déjà expiré, car ma machine hôte n'était pas deux jours de retard. P>
Un autre résultat stupide. p> maxage code> a été ajoutée à la date actuelle. Donc, du côté du navigateur, le cookie devait expirer à l'heure GMT indiquée. P>
Hey, j'ai un problème similaire. Pourriez-vous s'il vous plaît m'aider ici ici. Stackoverflow.com/questions/64512910/...
J'avais un problème similaire dans lequel je fixais quelque chose sur la session qui ne persiste pas en dehors du Mon problème s'est avéré être que j'étais J'ai ajouté un app.get () code> Il a été installé. P>
res.redirect () code> à la fin de mon
app.get () code >. On dirait que je fixais quelque chose sur un objet de requête puis de lui permettre de recueillir des ordures. P>
res.redirect ('/ nextmethod') code> et les données persistent bien. P>
Pouvez-vous également coller le code où vous y compris le magasin de session ReDIS? Il y a une option de délai d'expiration là-bas, peut-être que vous le réglez accidentellement trop bas.
Ajouté :) Il est défini à 60 secondes et je n'utilise clairement pas 60 secondes pour écrire les informations d'identification ...
Je suppose que c'est un petit projet, je pense qu'il est préférable de le poster quelque part (gist, pastique) et donner un lien. Je parie que l'erreur est d'une manière ou d'une autre dans un code que vous ne collez pas. (juste une hypothèse)
Ajouté le lien GIST à la fin
@Florian je vote pour vous. C'est le plus que je puisse faire ici pour vous :-)