2013-02-05 20 views
5

Sto usando nodejs (expressjs) ospitato su heroku.Come pulire tutte le sessioni in Nodejs (heroku + redis)?

sessioni vengono memorizzati in Redis (Redistogo plug-in per Heroku):

RedisStore = require('connect-redis')(express) 
app.use express.session 
     secret: process.env.CLIENT_SECRET 
     cookie: { maxAge: 604800000 } 
     store: new RedisStore {client: redis} 

Dopo utente connesso devo conservare le sue informazioni in req.session

after_user_logged_id = (req, user)->  
    req.session.current_user = 
    id: user._id 
    name: user.name 

ho bisogno di riavviare il server e pulire tutto sessioni: disconnetti tutti gli utenti per costringerli ad accedere ancora una volta. Come dovrei farlo? Il riavvio del plugin redis non aiuta.

+1

Si potrebbe implementare da soli, nel codice. Potrebbe essere una buona caratteristica avere, se è necessario aggiornare/modificare qualcosa nella sessione in futuro. Quello che suggerisco è di verificare l'esistenza di alcune proprietà, e in caso contrario distruggere la sessione, costringendo l'utente ad accedere, a quel punto si imposta la proprietà. Qualcosa come: 'if (session.version <1) {session.destroy()}'. –

+0

dovrei metterlo in app.configure() -> app.use (req, res, next) -> session_logic? –

+1

Sì, puoi metterlo lì e probabilmente vuoi anche 'res.redirect()' alla tua pagina di login. –

risposta

6

redis.flushdb() può essere un po 'estrema, se si finisce per immagazzinare qualcos'altro in Redis. Hai solo bisogno di cancellare tutti i tasti "sess: *". Purtroppo, non c'è del *, in modo da poter usare qualcosa di simile:

redis.keys("sess:*", function(err, key) { 
    redis.del(key, function(err) { 
    }); 
}); 
0

codice per pulire tutte le sessioni Redis:

RedisStore = require('connect-redis')(express) 
rtg = require('url').parse process.env.REDISTOGO_URL 
redis = require('redis').createClient rtg.port, rtg.hostname 
redis.auth rtg.auth.split(':')[1] # auth 1st part is username and 2nd is password separated by ":" 
    try 
    console.log "clean sessions" 
    redis.flushdb() 
    catch err 
    console.log "error:", err 
Problemi correlati