2012-02-15 10 views
19

Se un utente ha già effettuato l'accesso e tenta di accedere nuovamente in una nuova istanza, mi piacerebbe che disconnettesse l'altra istanza utente. Non voglio che lo stesso utente sia loggato due volte sulla mia applicazione.Come posso trovare l'ID di sessione quando usi express/connect e un session store?

Attualmente la sessione è memorizzata in un negozio Redis, sto usando express/connect per gestire lo storage di sessione. Una delle funzioni disponibili che potrebbero essere utilizzati per distruggere la sessione è la seguente:

.destroy(sid, callback) 

però ho bisogno di scoprire che id di sessione prima che chiami .destroy(). In Redis il nome utente è memorizzato come parte della sessione.

Domanda: È possibile interrogare Redis per ottenere l'id di sessione in base al nome utente?

risposta

53

req.sessionID vi fornirà SID della sessione.

+2

Perché questa non è la risposta accettata? Funziona alla grande per me. Grazie! Il parser di cookie –

0

Domanda: È possibile interrogare Redis per ottenere l'id di sessione in base al nome utente?

No. Le chiavi di sessione in redis non hanno il nome dell'utente.

Ecco un pensiero, tuttavia: quando un utente che ha già effettuato l'accesso tenta di accedere nuovamente, non lo vedi, nella tua applicazione, o distrugge immediatamente la vecchia sessione, o non consente loro di effettuare nuovamente il login?

15

Memorizzare il SID con l'account, quando l'utente esegue il login durante la convalida del database dell'account utente, chiama .destroy (sid, fn), quindi aggiorna il SID nel database con il SID corrente dell'utente.

Nel mio caso usando MongoDB è così che ho fatto:

app.post('/login', function(req, res) 
{ 
    var sid = req.sessionID; 
    var username = req.body.user; 
    var password = req.body.pass; 

    users.findOne({username : username, password : password}, function(err, result) 
    { 
    ... 
    sessionStore.destroy(result.session, function(){ 
     ... 
     users.update({_id: result._id}, {$set:{"session" : sid}}); 
     ... 
    } 
    ... 
    } 
} 
12

Per i lettori recenti;

middleware

Connect non sono incluse in veloce a partire dalla versione 4.

Quindi, al fine di avere req.sessionID lavoro che si deve fare seguente:

  1. Assicurarsi di avere cookie-parser abd express-session moduli all'interno della vostra package.json . Se non è aggiunto, aggiungerli:
npm install express-session --save 
npm install cookie-parser --save 
  1. Fate attenzione sull'ordine pur richiedendo loro nel file app.js e aggiungere parametri di configurazione richiesti.
var cookieParser = require('cookie-parser'); 
var session = require('express-session') 
app.use(cookieParser()); 
app.use(session({ 
    secret: '34SDgsdgspxxxxxxxdfsG', // just a long random string 
    resave: false, 
    saveUninitialized: true 
})); 
  1. Ora si dovrebbe utilizzare req.sessionID e req.session.id.
+2

è stato ritirato per la sessione Express a 1.5.0 (vedere readme all'indirizzo https://github.com/expressjs/session). Infatti, il parser dei cookie può ora causare effetti collaterali. – YiddishNinja

Problemi correlati