Quand utiliser saveUninitialized et les sauvegarder dans l'express-session
Je suis novice avec la MOYENNE de la pile. J'ai lu l'express-session github doc mais il y a quelques options qui ne sont pas claires pour moi. Ces options sont saveUninitialized
et resave
.
Quelqu'un peut-il expliquer avec exemples quels sont les advatanges de l'aide saveUninitialized
et resave
, et quel sera l'effet si l'on change les valeurs booléennes dans ces options.
Syntaxe:-
app.use(session({
resave: false,
saveUninitialized: true,
}))
Vous devez vous connecter pour publier un commentaire.
Supposons que les sessions sont activés à l'échelle mondiale (pour toutes les demandes).
Lorsqu'un client fait une requête HTTP, et que la demande ne contient pas un cookie de session, une nouvelle session sera créé par
express-session
. La création d'une nouvelle session n'a que peu de choses:req.session
saveUninitialized
, à la fin de la demande, l'objet de session sera stocké dans la session de store (ce qui est généralement une sorte de base de données)Si, pendant la durée de vie de la demande de la session de l'objet n'est pas modifié, puis, à la fin de la demande et quand
saveUninitialized
est faux, l' (encore vides, parce que non modifié) objet de la session ne sera pas stocké dans la session de magasin.Le raisonnement derrière cela est que cela permettra d'éviter beaucoup de vide objets de session étant stocké dans la session de magasin. Car il n'y a rien d'utile pour stocker, la session est "oublié" à la fin de la demande.
Quand voulez-vous permettre cela? Lorsque vous voulez être en mesure d'identifier les visiteurs récurrents, par exemple. Vous seriez capable de reconnaître un tel visiteur, car ils envoyer le cookie de session contenant l'id unique.
Sur
resave
: ce peut être activé pour la session de magasins qui ne supportent pas le "toucher" de la commande. Ce qu'il fait est de dire à la session de stocker qu'une session particulière est toujours actif, ce qui est nécessaire parce que certains magasins de supprimer les inactifs (non utilisé) sessions, après un certain temps.Si une session pilote de banque d'informations ne pas mettre en œuvre la touche de commande, puis vous devez activer
resave
de sorte que même si une session n'a pas été changé lors d'une demande, il est toujours mis à jour dans le magasin (marquant active).Donc, il dépend entièrement de la session magasin que vous utilisez si vous avez besoin d'activer cette option ou non.
touch
commande est documenté ici: github.com/expressjs/session#sessiontouchUne chose à noter est que si vous définissez
saveUninitialized
à faux, le cookie de session ne sera pas mis sur le navigateur, sauf si la session est modifié. Ce comportement peut être implicite, mais il n'était pas clair pour moi quand j'étais en première lecture par le biais de la la documentation.req.session.liked = id
et maintenant je ne reçois pas de nouvelles id de session. Espérons que cela a réglé mon problème.