दिलचस्प पोस्ट
जावास्क्रिप्ट में == और === के बीच का अंतर सी # में ब्रश / ब्रश रंग का नाम बदलें SOAP PHP दोष पार्सिंग WSDL: बाह्य इकाई को लोड करने में असफल? मैं लगातार श्रेणियों पर समूह कैसे करूं? जावा और सुपरक्लासेस में विरासत (वस्तु, कक्षा) JTextPane स्वरूपण संपूर्ण HTML पेज पर कर्सर की प्रतीक्षा करें IE8 पर पहुँच प्राप्त करने से त्रुटि को वंचित नहीं किया गया है WPF पृष्ठभूमिवर्कर बनाम डिस्पैचर XML फ़ाइल में दिनांक / समय के लिए उपयोग करने के लिए सही प्रारूप क्या है सर्वश्रेष्ठ वेब छवि खोज एपीआई क्या है? एक कोड कैसे लिखता है जो प्रदर्शन को सुधारने के लिए सबसे अच्छा उपयोग करता है CPU कैश? एंड्रॉइड एनडीके से संपत्ति में फाइल कैसे प्राप्त करें SQLite में चर घोषित करें और इसका उपयोग करें जांचते हुए कि एक फ़ील्ड में स्ट्रिंग है

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

Solutions Collecting From Web of "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 के साथ कार्य करता है और पिछड़े संगत नहीं होगा।

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