दिलचस्प पोस्ट
जेक्वियो अजाक्स पोस्टिंग जेसन से वेबसाइरी Ggplot2 का उपयोग कर, क्या मैं अक्ष में एक ब्रेक सम्मिलित कर सकता हूँ? त्रुटि: '..' में सदस्य '..' के लिए अनुरोध जो कि गैर-वर्ग प्रकार का है फेसबुक एसडीके के साथ लॉगिन करने में असफल अवैध त्रुटि बहुआयामी सरणी के लिए एक आयामी पहुंच: अच्छी तरह से परिभाषित सी? फ़ायरफ़ॉक्स और क्रोम / क्रोमियम में परिवर्तन और ड्रॉप इवेंट्स का इस्तेमाल करके निर्देशिका कैसे अपलोड और सूचीबद्ध करें Templating आसान बनाने के लिए JSP चालें? रीसाइक्लर देखें onClick दो समय स्ट्रिंग्स के बीच समय अंतराल की गणना कैसे करें regex और javascript का उपयोग करते हुए html में शब्द हाइलाइट करें – लगभग वहां जब आप क्रोमेडरियर के साथ सेलेनियम का उपयोग कर रहे हैं तो क्या कोई वेबसाइट पता लगा सकती है? मैं इस स्थानीय होस्ट से एक ही कंप्यूटर पर दूसरे कंप्यूटर से कैसे कनेक्ट करूं? सी ++ में तर्क के चर संख्या? सेलेनियम 2 में ड्रॉप डाउन विकल्प का चयन कैसे करें मैं समान संदंश और गैर-कॉन्स्ट सदस्य कार्यों के बीच कोड दोहराव कैसे निकालूं?

socket.io और सत्र?

मैं व्यक्त रूपरेखा का उपयोग कर रहा हूँ मैं socket.io से सत्र डेटा तक पहुंचना चाहता हूं मैंने client.listener.server.dynamicViewHelpers डेटा के साथ गतिशीलहैल्गर एक्सप्रेस की कोशिश की, लेकिन मुझे सत्र डेटा प्राप्त नहीं हो पाया। क्या ऐसा करने के लिए एक सरल तरीका है? कृपया कोड देखें

app.listen(3000); var io = require('socket.io'); var io = io.listen(app); io.on('connection', function(client){ // I want to use session data here client.on('message', function(message){ // or here }); client.on('disconnect', function(){ // or here }); }); 

वेब के समाधान से एकत्रित समाधान "socket.io और सत्र?"

यह फ्लैश सॉकेट ट्रांसपोर्ट पर जा रहे कुर्सियों के लिए काम नहीं करेगा (यह सर्वर को आवश्यक कुकीज़ नहीं भेजता है), लेकिन यह बाकी सब कुछ के लिए मज़बूती से काम करता है मैं बस अपने कोड में फ्लैशसाकेट ट्रांसपोर्ट अक्षम करता हूं

इसे काम करने के लिए, एक्सप्रेस / कनेक्ट पक्ष में, मैं स्पष्ट रूप से सत्र की दुकान को परिभाषित करता हूं ताकि मैं इसे सॉकेट में इस्तेमाल कर सकूं:

 MemoryStore = require('connect/middleware/session/memory'), var session_store = new MemoryStore(); app.configure(function () { app.use(express.session({ store: session_store })); }); 

फिर मेरे सॉकेट कोड के अंदर, मैं कनेक्ट फ्रेमवर्क को शामिल करता हूं इसलिए मैं कुकीज़ से कनेक्ट.sid को पुनः प्राप्त करने के लिए अपनी कुकी पार्सिंग का उपयोग कर सकता हूं। मैं सत्र सत्र में उस सत्र को देखता हूं जो कि कनेक्ट साइड की तरह है:

 var connect = require('connect'); io.on('connection', function(socket_client) { var cookie_string = socket_client.request.headers.cookie; var parsed_cookies = connect.utils.parseCookie(cookie_string); var connect_sid = parsed_cookies['connect.sid']; if (connect_sid) { session_store.get(connect_sid, function (error, session) { //HOORAY NOW YOU'VE GOT THE SESSION OBJECT!!!! }); } }); 

आप तब आवश्यकता के अनुसार सत्र का उपयोग कर सकते हैं

सॉकेट। आईओ सत्र मॉड्यूल समाधान क्लाइंट (स्क्रिप्टिंग) स्तर पर सत्र आईडी को उजागर करके एक्सएसएस हमलों के लिए ऐप का पर्दाफाश करता है।

इसके बजाय इस समाधान की जांच करें (सॉकेट.आईओ> = v0.7 के लिए)। दस्तावेज़ यहां देखें

मैं सुझाव है कि पूरी तरह से पहिया को फिर से बदलने के लिए नहीं। आपके लिए आवश्यक टूल पहले से ही एक एनपीएम पैकेज है। मुझे लगता है कि आपको यही चाहिए: session.socket.io मैं इन दिनों इनका उपयोग कर रहा हूं और यह बहुत ही उपयोगी होगा मुझे लगता है !! सॉकेट.ओयर में एक्सप्रेस-सत्र को जोड़ने से कई फायदे होंगे!

संपादित करें: कुछ मॉड्यूल जो काम नहीं कर रहा था, कोशिश करने के बाद, मैं वास्तव में चला गया और यह करने के लिए अपनी खुद की लाइब्रेरी लिखी है। बेशर्म प्लग: इसे https://github.com/aviddiviner/Socket.IO-Sessions पर देखें । मैं ऐतिहासिक उद्देश्यों के लिए नीचे मेरी पुरानी पोस्ट छोड़ दूँगा:


मुझे प्रोजेक्ट के ऊपर दिए गए समाधान के अनुसार फ्लैशस्केट ट्रांसपोर्ट को बायपास किए बिना काफी काम मिला है। मैं सॉकेट.आईओ के साथ भी एक्सप्रेस का उपयोग कर रहा हूं ऐसे।

सबसे पहले, सत्र आईडी सत्र को पास करें:

 app.get('/', function(req,res){ res.render('index.ejs', { locals: { connect_sid: req.sessionID // ... } }); }); 

फिर आपके विचार में, इसे सॉकेट.IO क्लाइंट-साइड से लिंक करें:

 <script> var sid = '<%= connect_sid %>'; var socket = new io.Socket(); socket.connect(); </script> <input type="button" value="Ping" onclick="socket.send({sid:sid, msg:'ping'});"/> 

फिर अपने सर्वर-साइड सॉकेट। आईओ श्रोता में, इसे चुनें और सत्र डेटा पढ़ें / लिखें:

 var socket = io.listen(app); socket.on('connection', function(client){ client.on('message', function(message){ session_store.get(message.sid, function(error, session){ session.pings = session.pings + 1 || 1; client.send("You have made " + session.pings + " pings."); session_store.set(message.sid, session); // Save the session }); }); }); 

मेरे मामले में, redis-connect लाइब्रेरी का उपयोग करते हुए redis-connect

 var RedisStore = require('connect-redis'); var session_store = new RedisStore; // ... app.use(express.session({ store: session_store })); 

आशा है कि यह ऐसे किसी व्यक्ति को मदद करता है जो इस पोस्ट को Google खोज करते समय पाता है (जैसा मैंने किया था;)

इसे देखें: सॉकेट.आईओ प्रमाणीकरण

मैं client.request... माध्यम से कुछ भी नहीं लाने का सुझाव देता हूं। client.request... या client.listener... क्योंकि वह सीधे client ऑब्जेक्ट से जुड़ा नहीं है और हमेशा अंतिम लॉग इन उपयोगकर्ता को इंगित करता है!

सॉकेट.आईओ-कनेक्ट देखें

सॉकेट के आसपास वेबसाकेट मिडलवेयर रैपर कनेक्ट करें। आईओ-नोड https://github.com/bnoguchi/Socket.IO-connect

यह आपको Socket.IO अनुरोधों को Socket.IO इवेंट हैंडलर्स से निपटने से पहले Socket.IO अनुरोध एक्सप्रेस / कनेक्ट मिडलवेयर स्टैक को नीचे करने की अनुमति देगा, आपको सत्र, कुकीज़ आदि तक पहुंच प्रदान करेगा। यद्यपि, मुझे यकीन नहीं है कि यह सभी सॉकेट.ओओ के परिवहन के साथ काम करता है।

आप इसे देख सकते हैं: https://github.com/bmeck/session-web-sockets

या वैकल्पिक रूप से आप उपयोग कर सकते हैं:

 io.on('connection', function(client) { var session = client.listener.server.viewHelpers; // use session here }); 

उम्मीद है की यह मदद करेगा।

मुझे यकीन नहीं है कि मैं इसे सही कर रहा हूं। https://github.com/LearnBoost/socket.io/wiki/Authorizing

हैंडशेक डेटा के साथ, आप कुकीज़ तक पहुंच सकते हैं। और कुकीज़ में, आप connect.sid को पकड़ सकते हैं जो कि प्रत्येक ग्राहक के लिए सत्र आईडी है। और फिर डेटाबेस से सत्र डेटा प्राप्त करने के लिए connect.sid का उपयोग करें (मैं मान रहा हूँ कि आप RedisStore का उपयोग कर रहे हैं)

आप एक्सप्रेस socket.io-session का उपयोग कर सकते हैं।

सॉकेट.ओ के साथ कुकी-आधारित एक्सप्रेस-सत्र मिडलवेयर साझा करें एक्सप्रेस> 4.0.0 और socket.io> 1.0.0 के साथ कार्य करता है और पिछड़े संगत नहीं होगा।

मेरे लिए काम किया !!