2012-06-10 25 views
30

सेट करें मैं एक नोड ऐप पर काम कर रहा हूं जो एक्सप्रेस और सॉकेटियो का उपयोग करता है। मैं अपने एक्सप्रेस नियंत्रक में एक कुकी सेट करना चाहता हूं जो तब मेरे क्लाइंट-साइड जावास्क्रिप्ट कोड से सुलभ है। जो कुछ भी मैं कोशिश करता हूं वह काम नहीं करता है:एक्सप्रेस क्लाइंट-साइड एक्सेसिबल कुकी एक्सप्रेस

res.setHeader('Set-Cookie','test=value'); 
res.cookie('rememberme', 'yes', { maxAge: 900000 }); 

क्या मुझे कुछ याद आ रही है? अग्रिम में धन्यवाद!

+0

क्लाइंट-साइड कोड को दिखाने के लिए मदद कर सकता है। – ebohlman

+0

मैं बस क्रोम इंस्पेक्टर में जा रहा हूं और कुकीज़ देख रहा हूं। हालांकि कुछ भी नहीं देख रहा है ... – dshipper

उत्तर

48

इसे समझ लिया! डिफ़ॉल्ट रूप से एक्सप्रेस http को केवल सत्य पर सेट करता है। इसका मतलब है कि आपकी कुकीज़ क्लाइंट-साइड जावास्क्रिप्ट द्वारा एक्सेस नहीं की जा सकती है। आदेश में सही ढंग से कुकीज़ क्लाइंट पर सुलभ स्थापित करने के लिए की तरह एक स्निपेट का उपयोग करें:

res.cookie('rememberme', 'yes', { maxAge: 900000, httpOnly: false}); 

मैं यह भी देखा है अगर आप इस आदेश को फोन और फिर res.redirect फोन, कुकी सेट नहीं हो जाएगा कि । इस आदेश को काम करने के लिए किसी बिंदु पर res.render द्वारा पीछा किया जाना चाहिए। यकीन नहीं है कि यह क्यों है।

+0

यह एक अच्छी जानकारी है। किसी भी मौके से आप जानते हैं कि एक्सप्रेस फ्रेमवर्क में सर्वर साइड में क्लाइंट साइड कुकी कैसे एक्सेस करें? – user644745

+5

@ user644745 आप 'res.cookies' ऑब्जेक्ट को देखकर एक्सप्रेस में कुकीज़ पढ़ सकते हैं। उदाहरण के लिए, 'session_id' नाम की एक कुकी' res.cookies.session_id' पर मौजूद होगी। http://expressjs.com/api.html#req.cookies – frontendbeauty

+1

कारण आपको res.render या res.send को कॉल करने की आवश्यकता है क्योंकि कुकी सेट करने से प्रतिक्रिया शुरू नहीं होती है। भेजें और प्रस्तुत करें। यह कुकी विधि केवल प्रतिक्रिया ऑब्जेक्ट में एक कुकी जोड़ती है। –

3

असल में मैंने कुछ घंटों के लिए एक ही समस्या का अनुभव किया है।

यहाँ मेरी कोड है:

res.cookie("mycookie", "1234567890", { secure:true, maxAge:120000, httpOnly: true }); 

मैं प्रतिक्रिया हेडर में सेट कुकी अनुदेश देख सकते हैं, लेकिन क्रोम में मैं कुकी नहीं मिल रहा है और मैं req.cookies द्वारा कुकी नहीं मिल सकता है [ ' mycookie ']।

इस समस्या का मूल कारण यह है कि मैंने HTTPS कनेक्शन का उपयोग नहीं किया। (कुकी-पार्सर मिडलवेयर साथ एक्सप्रेस 4.x)

इस दस्तावेज़ के अनुसार: Simple Steps to Secure Your Express Node App

अगर मैं विकल्प सुरक्षित सेट = सच है, तो ब्राउज़र नहीं मेरी कुकी किसी भी HTTP अनुरोध में भेज देंगे लेकिन HTTPS सुरक्षित कनेक्शन । फिर मैंने सुरक्षित हटा दिए जाने के बाद: सही विकल्प, मुझे अपना कुकी काम मिला।

0

तो http में उपयोग करने के लिए हम उपयोग कर सकते हैं:

res.cookie("mycookie", "1234567890", { secure:false, maxAge:120000, httpOnly: true });? 
संबंधित मुद्दे