2011-09-14 16 views
5

Domanda:

E 'possibile memorizzare i dati della sessione simile a $ _SESSION [ 'somedata'] = "Ciao" in PHP?

Ecco il mio codice finora:

Creazione del negozio di memoria

var MemoryStore = express.session.MemoryStore, 
    sessionStore = new MemoryStore(); 

espresso Config

app.configure(function(){ 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ 
    store: sessionStore, 
    secret: 'secret', 
    key: 'express.sid'})); 
    app.use(require('stylus').middleware({src: __dirname + '/public'})); 
    app.use(app.router); 
    app.use(express.static(__dirname + '/public')); 
}); 

Analisi il cookie per ottenere l'ID di sessione sulla stretta di mano autorizzazione

var parseCookie = require('connect').utils.parseCookie; 

io.set('authorization', function (data, accept) { 
    if (data.headers.cookie) { 
    data.cookie = parseCookie(data.headers.cookie); 
    data.sessionID = data.cookie['express.sid']; 

    sessionStore.get(data.sessionID, function (err, session) { 
     if (err) 
     { 
      accept(err.message, false); //Turn down the connection 
     } 
     else 
     { 
      data.session = session; //Accept the session 
      accept(null, true); 
     } 
    }); 
    } else { 
    return accept('No cookie transmitted.', false); 
    } 
}); 

Memorizzazione 'loggedin' quando la password e nome utente sono 'admin'

io.sockets.on('connection', function (socket) { 

    socket.on('details', function(data){ 
    console.log("Details: " + data.u + data.p); 
    if(data.p == "admin" && data.u == "admin") 
    { 
     //Add the logged in field to the session 
    } 
    }); 
}); 

Se l'utente è connesso in loro redirect alla home page

app.get(navigation.login.uri, function(req, res){ 
    if(req.session.loggedin) 
    { 
    res.redirect('/home'); 
    } 
    else 
    { 
    res.render('login', { 
     title: navigation.login.title, 
     navigation: navigation 
    }); 
    } 
}); 

Quando provo a usare:

req.session.loggedIn 

Il valore non è definito. Potrebbe trattarsi di un problema di archiviazione o accedo in modo errato?

risposta

0

Sei vicino - manca solo un paio di cose.

Le informazioni che si raccolgono nella funzione di autorizzazione socket sono accessibili tramite socket.handshake nel gestore di connessione.

Quindi, quello che penso che vuoi è:

io.sockets.on('connection', function (socket) { 

    socket.on('details', function(data){ 
    console.log("Details: " + data.u + data.p); 
    if(data.p == "admin" && data.u == "admin") 
    { 
     //Add the logged in field to the session 
     socket.handshake.session.loggedIn = true; // Set the new session var 
     socket.handshake.session.save();   // Save the modified session 
    } 
    }); 
}); 

Non dimenticare di salvare la sessione dopo averlo modificato in caso contrario non viene mai indietro nel negozio.

+0

Proverò più tardi grazie! C'è un sito web con qualche tutorial/ulteriori informazioni su questo argomento che conosci? – Jack

+2

Viene visualizzato il seguente errore: "L'oggetto n. non ha metodo 'salva'" – Jack

0

Questo ha funzionato per me - è fondamentalmente solo necessario impostare una chiave nella sessionStore:

io.sockets.on('connection', function (socket) { 
    socket.on('details', function(data){ 
      console.log("Details: " + data.u + data.p); 
      if(data.p == "admin" && data.u == "admin") 
      { 
       // set the value 
       sessionStore.loggedIn = true; 
       // get the value 
       console.log(sessionStore.loggedIn); 
      } 
    }); 
}); 

ho provato su un sito web con alcune sottopagine, il valore è stato coerente. Un ricaricamento forzato o la chiusura del browser lo ripristina.

Problemi correlati