web-dev-qa-db-fra.com

Cookie de session uniquement pour Express.js

http://www.javascriptkit.com/javatutors/cookie.shtml

Les cookies de session uniquement, d'autre part, stockent des informations dans la mémoire du navigateur et sont disponibles pour la durée de la session du navigateur. En d'autres termes, les données stockées dans un cookie de session sont disponibles à partir du moment du stockage jusqu'à la fermeture du navigateur. Passer d'une page à l'autre pendant cette période n'efface pas les données.

Comment puis-je y parvenir en utilisant Express.js ?

23
Alfred

Voici ce que je voulais (en quelque sorte). Lorsque je ferme le navigateur, les informations disparaissent.

var express = require('express');
var app = express.createServer();

var MemoryStore = require('connect/middleware/session/memory');
app.use(express.bodyDecoder());
app.use(express.cookieDecoder());

app.get('/remember', function(req, res) {
    res.cookie('rememberme', 'yes', { expires: new Date() - 1, httpOnly: true });
});

app.get('/', function(req, res){
    res.send('remember: ' + req.cookies.rememberme);
});

app.listen(4000, '127.0.0.1');
11
Alfred

Tout d'abord, ce site Web est un endroit horrible où aller.

Passons maintenant à la question.

Quelles sont réellement les sessions:

  • Les données sont stockées côté serveur.
  • Un cookie est émis qui contient un identifiant.
  • Cet ID est renvoyé au serveur à chaque demande, car le navigateur envoie les cookies.
  • Maintenant, le serveur peut réassocier l'ID dans le cookie - communément appelé Session ID ou court SID - avec les données de session stockées sur le serveur.

Express.js prend en charge les sessions intégrées .

Ce que l'exemple montre:

  • Configuration du middleware Express.js
  • Utiliser un magasin tiers pour enregistrer les données de session, dans ce cas Redis (quel IMO est exagéré pour votre problème ATM)

L'installation de Redis nécessite un certain travail, mais il est également possible d'utiliser le magasin de mémoire intégré d'Express.js:

var express = require('express');
var app = express.createServer();

var MemoryStore = require('connect/middleware/session/memory');
app.use(express.bodyDecoder());
app.use(express.cookieDecoder());
app.use(express.session({ store: new MemoryStore({ reapInterval: 60000 * 10 }) }));

app.get('/', function(req, res){
    req.session.visitCount = req.session.visitCount ? req.session.visitCount + 1 : 1;
    res.send('You have visited this page ' + req.session.visitCount + ' times');
});

app.listen(4000);

Cela gardera simplement une trace du nombre de fois que vous avez visité la page, fermé votre navigateur et rouvert. Les comptes seront toujours là.

Vous pouvez en savoir plus sur les options de MemoryStore, comme la durée de vie maximale d'une session, etc. ici .

65
Ivo Wetzel
app.use(express.session({cookie: { path: '/', httpOnly: true, maxAge: null }, secret:'eeuqram'}));

Ce qui précède fonctionne sur IE8, Firefox et Chrome. La pièce importante est maxAge: null

7
Ustaman Sangat
app.get('/remember', function(req, res) {
   res.cookie('rememberme', 'yes', { expires: 0, httpOnly: true });
 });

Cela créera un cookie de session. À la fermeture du navigateur, il sera effacé!

2
Raja

Voici le code mis à jour pour réponse d'Alfred (session utilisant Express.js).

    var express = require('express');
    var app = express.createServer();

    var MemoryStore = require('/home/node/node_modules/connect/lib/middleware/session/memory');
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.session({
        key: 'some-key',
        secret: 'some-We1rD sEEEEEcret!',
        store: new MemoryStore({ reapInterval: 60000 * 10 })
    }));

   app.get('/', function(req, res) {
       req.session.visitCount = req.session.visitCount ? req.session.visitCount + 1 : 1;
       res.send('You have visited this page ' + req.session.visitCount + ' times');
   });

   app.listen(4000);
1
Raja