2012-11-17 16 views
5

जारी नहीं है मैं नोड में एक बुनियादी सत्र प्रणाली स्थापित करने की कोशिश कर रहा हूं। यहाँ मैं अब तक क्या कर लिया है:एक्सप्रेस सत्र

app.js:

app.use(express.cookieParser('stackoverflow')); 
app.use(express.session()); 

मैं ajax.js में सत्र डेटा सेट कर रहा हूं:

addClassToCart: function(req, res) { 
    req.session.cart = req.body.classId; 
    console.log(req.session.cart); 
} 

यह सही जानकारी लॉग करता है। हालांकि, जब मुझे लगता है कि जानकारी कहीं और प्राप्त करने का प्रयास (एक ही फाइल, विभिन्न समारोह):

console.log(req.session.cart); 

मैं undefined मिलता है। मुझे लगता है कि मैं कुछ अविश्वसनीय रूप से बुनियादी याद कर रहा हूँ। इसके लिए कई ट्यूटोरियल या तो भयानक हैं या मुझे और भी पैकेज में जोड़ने की आवश्यकता है (कुछ जो मैं टालने की कोशिश कर रहा हूं)। मेरी डिबगिंग से

अधिक डेटा:

  • इस गैर AJAX के साथ काम करता है का अनुरोध करता है
  • से पहले ही लॉग ऑन है एक सत्र के लिए निर्धारित है।

उत्तर

5

जैसा कि यह पता चला है, यह मुद्दा एक्सप्रेस 'सत्र के साथ नहीं था (जैसा कि अन्य उत्तरों को लगता है)। इसके बजाय, यह मेरे हिस्से पर एक गलतफहमी थी। मैं निम्नलिखित के लिए addClassToCart बदल दिया है:

addClassToCart: function(req, res) { 
    req.session.cart = req.body.classId; 
    console.log(req.session.cart); 
    res.send('class added'); 
    } 

res.send() समस्या तय जोड़ा जा रहा है।

+0

मुझे एक ही समस्या है। सत्र जारी रखने के लिए एक प्रतिक्रिया ट्रिगर भेज रहा था? क्योंकि यह वही है जो मैं नहीं कर सकता :) – bitstream

+0

हां, एक प्रतिक्रिया भेजने से सत्र अपडेट ट्रिगर हुआ। – SomeKittens

+1

हे! मैंने req.session.save() द्वारा मैन्युअल रूप से अद्यतन को ट्रिगर करके अपनी समस्या को ठीक किया। आपको प्रतिक्रिया भेजने की आवश्यकता नहीं है। – bitstream

-1

मैं बुनियादी सत्र की दुकान के बारे में पता नहीं है, लेकिन redis केवल सेटअप करने के लिए मुझे कुछ मिनट लग गए:

app.use(express.session({ 
    store: new RedisStore({ 
     host: cfg.redis.host, 
     db: cfg.redis.db 
    }), 
    secret: 'poopy pants' 
    })); 

Mac पर:

brew install redis 
+1

> या मुझे और भी पैकेज में जोड़ने की आवश्यकता है (कुछ जिसे मैं टालने की कोशिश कर रहा हूं)। – SomeKittens

-1
app.use(express.session({ 
    secret: "my secret", 
    store: new RedisStore, 
    cookie: { secure: false, maxAge:86400000 } 
})); 

सुनिश्चित नहीं हैं समस्या सत्र की उम्र में है, लेकिन यह केवल सुरक्षित होने के लिए, मैं आपको अधिकतमएज निर्दिष्ट करने का सुझाव दूंगा।

+0

इसके लिए मुझे 'रेडिस' जोड़ने की आवश्यकता है। मैंने स्पष्ट रूप से इस सवाल में कहा है कि मैं नए पैकेज स्थापित नहीं करना चाहता हूं। – SomeKittens

2

रूप the answer to a related SO question में बताया गया है, यह भी आप अपने सर्वर से डेटा प्राप्त करने fetch उपयोग कर रहे हैं हो सकता है, लेकिन आप credentials विकल्प में उत्तीर्ण नहीं होते हैं:

fetch('/addclasstocart', { 
    method: 'POST', 
    credentials: 'same-origin' // <- this is mandatory to deal with cookies 
}) 

कुकीज़ को पास नहीं की जाएगी सर्वर जब तक आप इस विकल्प को शामिल नहीं करते हैं जिसका अर्थ है कि अनुरोध की सत्र वस्तु प्रत्येक नई कॉल के साथ रीसेट हो जाएगी।