2011-09-14 12 views
5

प्रश्न:

यह संभव $ _SESSION के समान सत्र डाटा स्टोर करने की है [ 'somedata'] = "हैलो" PHP में?

कुकी पार्स हाथ मिलाना पर सत्र id प्राप्त करने के लिए स्मृति की दुकान

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

एक्सप्रेस कॉन्फ़िग

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')); 
}); 

बनाना:

यहाँ मेरी कोड अब तक है प्रमाणीकरण

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); 
    } 
}); 

'loggedin' भंडारण जब पासवर्ड और उपयोगकर्ता नाम 'व्यवस्थापक'

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 
    } 
    }); 
}); 

हैं उपयोगकर्ता के प्रवेश तो उन्हें घर पृष्ठ

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 
    }); 
    } 
}); 

को अनुप्रेषित जब मैं उपयोग करने का प्रयास करता हूं:

req.session.loggedIn 

मूल्य अपरिभाषित है। क्या यह एक भंडारण समस्या हो सकती है, या क्या मैं इसे गलत तरीके से एक्सेस कर रहा हूं?

उत्तर

0

आप करीब हैं - बस कुछ चीजें याद आ रही हैं।

सॉकेट प्रमाणीकरण फ़ंक्शन में जो जानकारी आप एकत्र कर रहे हैं वह आपके कनेक्शन हैंडलर में सॉकेट.handshake के माध्यम से सुलभ है।

तो, मुझे लगता है कि आप चाहते हैं:

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 
    } 
    }); 
}); 

यह अन्यथा संशोधित करने से यह कभी नहीं की दुकान में वापस हो जाता है के बाद सत्र को बचाने के लिए मत भूलना।

+0

मैं इसे बाद में धन्यवाद देने का प्रयास करूंगा! क्या इस विषय पर किसी भी ट्यूटोरियल/अधिक जानकारी के साथ कोई वेबसाइट है जिसे आप जानते हैं? – Jack

+2

मुझे निम्न त्रुटि मिलती है: "ऑब्जेक्ट # में कोई तरीका 'सेव' नहीं है" – Jack

0

यह मेरे लिए काम किया - आप मूल रूप से सिर्फ 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); 
      } 
    }); 
}); 

मैं कुछ उपपृष्ठ के साथ एक वेबसाइट पर यह कोशिश की, मूल्य संगत था। एक मजबूर पुनः लोड या ब्राउज़र बंद करना इसे रीसेट करता है।