कुकीज़ के बजाय व्यक्तियों की पहचान करने के लिए सॉकेट का उपयोग क्यों नहीं किया जा सकता है?


17

व्यक्तिगत ग्राहकों की पहचान करने के लिए आईपी पतों के उपयोग के संबंध में एक और सवाल पूछा गया था। मुझे लगता है कि मैं समझता हूं कि एक आईपी पता अपर्याप्त क्यों है। लेकिन सॉकेट के बारे में क्या है, जिसमें अधिक जानकारी है और, जो मैं समझता हूं, वह स्टेटफुल है? क्या कुकी के बदले में इसका इस्तेमाल संभव नहीं है?


18
सॉकेट स्टेटफ़ुल है, लेकिन वेबपेज डाउनलोड करने के बाद http कनेक्शन को खुला नहीं रखता है। संपूर्ण वेबपृष्ठ डाउनलोड होने के बाद यह लगभग 15 सेकंड बंद हो जाता है। यही कारण है कि आपको राज्य रखने के लिए कुकीज़ की आवश्यकता होती है
MT६ed

41
सॉकेट डेटा का एक टुकड़ा नहीं है। आप इसके बारे में नहीं भेज सकते। आपके सवाल का कोई मतलब नहीं है।
user207421

8
यह पूछने की तरह है कि आप संज्ञाओं के बजाय क्रियाओं का उपयोग क्यों नहीं कर सकते ...
user541686

2
@ ईजेपी: मैंने इस धारणा के तहत उत्तर दिया कि ओपी का मतलब सॉकेट ऑब्जेक्ट के बजाय source_ip, source_port, target_ip, target_port) चौगुनी है। लेकिन आपकी व्याख्या भी समझ में आती है।
जोर्ग डब्ल्यू मित्तग

आप कोशिश कर सकते हैं और कुकीज़ या सत्र के बिना राज्य या उपयोगकर्ता की पहचान को प्रबंधित करने के लिए फायरबेस काम करने के तरीके की नकल करें।
जेफ ओ

जवाबों:


64

एक सॉकेट एक कनेक्शन की पहचान करता है । कुकीज़ आमतौर पर एक उपयोगकर्ता की पहचान करने के लिए उपयोग किया जाता है । अगर मैं SE.SE में दो ब्राउज़र टैब खोलता हूं, तो मेरे पास दो कनेक्शन होंगे और इस प्रकार दो सॉकेट होंगे। लेकिन मैं चाहता हूं कि मेरी सेटिंग उन दोनों में बनी रहे। (वास्तव में, आमतौर पर, एक ब्राउज़र एक पृष्ठ के लिए कई सॉकेट खोलता है ताकि पृष्ठ लोड समय को गति मिल सके; मेरा मानना ​​है कि अधिकांश ब्राउज़रों का प्रति पृष्ठ 4 और 10 सॉकेट के बीच एक डिफ़ॉल्ट अधिकतम मूल्य है।)

और इसके विपरीत भी हो सकता है: यदि मैं अपना ब्राउज़र टैब बंद करता हूं, तो मशीन का कोई अन्य उपयोगकर्ता SE.SE को एक ब्राउज़र टैब खोल सकता है, और जिस स्थिति में (source_ip, source_port, target_ip, target_port) की समान चौगुनी प्राप्त कर सकता है। , वह मेरी सभी सेटिंग्स प्राप्त करेगा।


यह ध्यान देने योग्य है कि http2 (और http पाइपलाइनिंग) के साथ जो कि शायद आपके पास एसई के लिए दो सॉकेट नहीं होंगे। आपका ब्राउज़र उसी सॉकेट का फिर से उपयोग करेगा। आपको अलग-अलग ब्राउज़र चलाने होंगे।
मैथ्यू स्टील

3
एक तुच्छ स्थानीय जांच इंगित करता है क्रोम कि करता है एक सॉकेट प्रति टैब खुला रखने - शायद इसलिए कि वे सैंडबॉक्स रहे हैं और यह उन दोनों के बीच शेयर राज्य नहीं चाहता है - लेकिन प्रत्येक टैब का सॉकेट लगातार हो रहा है और अनुरोध शायद उस टैब में pipelined कर रहे हैं।
बेकार

1
यह भी ध्यान देने योग्य है कि आपको नहीं पता कि पीछे के छोर पर क्या हो रहा है। कई लोड बैलेंसर्स एक उपयोगकर्ता कनेक्शन को समाप्त कर देंगे और फिर अपने स्वयं के बैक एंड सर्वरों को खोल देंगे, जिसका अर्थ है कि आपके पास एक एकल सॉकेट साझा करने वाले कई उपयोगकर्ता हो सकते हैं।
दान

@Useless IIRC SE आपके द्वारा परीक्षण किए जाने के मामले में अपडेट (नए प्रश्न, संपादन आदि) लाने के लिए या तो WebS Pocket या लॉन्ग-पोलिंग (कमबैक) का उपयोग करता है। अन्य साइटें अलग तरह से व्यवहार कर सकती हैं - एक स्थिर साइट पर अनिश्चित काल तक खुले रहने वाले सॉकेट को रखने की कोई बात नहीं है।
बॉब

यह सच है, मुझे कुछ हद तक सही-स्थिर साइट को खोजने की कोशिश की गई। उसके लिए, Chrome टैब प्रति एकाधिक सॉकेट खोलता है, और अभी भी टैब के बीच उन्हें पुन: उपयोग नहीं है, लेकिन करता है एक बार टैब समाप्त लोड हो रहा है है पास उन्हें। वे आसानी से दिखाई देते हैं, क्योंकि वे TIME_WAIT में इतने लंबे समय तक बिताते हैं।
बेकार

20

टीसीपी सॉकेट्स को स्टेटफुल होने के लिए डिज़ाइन किया गया है ताकि सामान्य रूप से उनका उपयोग सत्रों की पहचान करने के लिए किया जा सके। SSH और ftp जैसे प्रोटोकॉल ठीक यही करते हैं।

HTTP को स्टेटलेस होने के लिए डिज़ाइन किया गया है और प्रत्येक कनेक्शन केवल डाउनलोड किए जाने वाले संसाधन से जुड़ा है। एक संसाधन के बाद टीसीपी सॉकेट डाउनलोड किया जाता है जो HTTP अनुरोध पर सवारी बंद होता है। इसका मूल कारण सादगी था। लेकिन इसका साइड-इफेक्ट यह है कि आधुनिक वेबसाइटों को चलाने वाले HTTP सर्वर सॉकेट आधारित सर्वरों की तुलना में SSH या ftp से कहीं अधिक उपयोगकर्ताओं को संभाल सकते हैं।

इसलिए सॉकेट्स का उपयोग नहीं किया जा सकता क्योंकि वेब पेज डाउनलोड करने के बाद HTTP सॉकेट बंद कर देगा।

बेशक, यह कहना कि HTTP प्रति संसाधन सॉकेट को बंद कर देगा, चीजों की देखरेख कर रहा है क्योंकि HTTP में पाइपलाइनिंग और लगातार कनेक्शन जैसी विशेषताएं हैं जो प्रति सॉकेट में कई संसाधन डाउनलोड कर सकते हैं। लेकिन यह सिर्फ अनुकूलन है। सब कुछ डाउनलोड होने के बाद आपका ब्राउज़र कुछ समय समाप्त होने के बाद सॉकेट को बंद कर देगा।

HTTP मूल रूप से HTML फ़ाइलों को डाउनलोड करने के लिए एक साधारण प्रोटोकॉल के रूप में डिज़ाइन किया गया था। पुराने ब्राउज़र भी HTML फाइलें डाउनलोड कर सकते हैं जैसे कि गोफर और एफटीपी जैसे अन्य प्रोटोकॉल। जैसे, HTTP स्टेटफुल बनाने का कोई कारण नहीं था क्योंकि HTML फाइलें सिर्फ साधारण टेक्स्ट फाइल होती हैं।

एक बार वेब फॉर्म पेश किए जाने के बाद और HTML पेजों को सत्र की जरूरत के लिए शुरू किए गए सर्वर वेब पेजों पर डेटा वापस भेजा जा सकता है। इस प्रकार कुकीज़ एक स्टेटलेस प्रोटोकॉल के लिए राज्य को फिर से पेश करने के लिए बनाई गई थीं जो एक स्टेटफुल ट्रांसफर परत के माध्यम से प्रेषित होती हैं जो एक स्टेटलेस नेटवर्क परत पर प्रसारित होती है। तो पूर्ण आवेदन परतें हैं:

  • इथरनेट, वाईफाई आदि = स्टेटलेस
  • आईपी ​​= स्टेटलेस
  • टीसीपी = स्टेटफुल
  • HTTP = स्टेटलेस
  • HTTP + कुकीज़ = स्टेटफुल

इन दिनों हमारे पास वेबसोकेट हैं जो आपके वेब पेज से सर्वर तक एक ही खुला सॉकेट रख सकते हैं। तो वेबस्कैट के साथ आप फिर से किसी उपयोगकर्ता की पहचान करने के लिए सॉकेट्स का उपयोग कर सकते हैं क्योंकि वेबसैट अपने आप में स्टेटफुल है। लेकिन ज्यादातर मामलों में आपको अभी भी मुख्य HTML पृष्ठ के लिए एक कुकी की आवश्यकता होगी जो कि वेबसैट शुरू करने वाली जावास्क्रिप्ट को लोड करती है।


4
"आधुनिक वेबसाइट चलाने वाले HTTP सर्वर SSH या ftp जैसे सॉकेट आधारित सर्वरों की तुलना में कहीं अधिक उपयोगकर्ताओं को संभाल सकते हैं" [उद्धरण वांछित]
el.pescado

6
@ el.pescado: यह सिर्फ तार्किक है। चूंकि सॉकेट आधारित सर्वर एक लाइव कनेक्शन रखते हैं इसलिए सॉकेट आधारित सर्वर केवल आपके द्वारा खोले जा सकने वाले फ़ाइल वर्णनकर्ताओं की अधिकतम संख्या तक सीमित होते हैं (और कुछ OSes सॉकेट फ़ाइल डिस्क्रिप्टर के लिए हार्ड डिस्क के साथ प्रतिस्पर्धा करते हैं)। यदि आपको कनेक्शन को जीवित रखने की आवश्यकता नहीं है, तो आपकी सीमा सिर्फ बैंडविड्थ है। ध्यान दें कि बैंडविड्थ सीमा वही मौसम है जो आप किसी कनेक्शन को जीवित रखते हैं या नहीं। आधुनिक HTTP सर्वर प्रति सेकंड लाखों अनुरोधों को संभाल सकते हैं। अगर आपको उन लाखों सॉकेटों को रखने की ज़रूरत है जब आप एक वेबपेज पढ़ते हैं तो सर्वर मर जाएगा
स्लीपबेटमैन

6
+1 के लिए "इस प्रकार कुकीज़ एक स्टेटलेस प्रोटोकॉल के लिए राज्य को फिर से पेश करने के लिए बनाई गई थीं जो एक स्टेटफुल ट्रांसफर परत के माध्यम से प्रेषित होती हैं जो एक स्टेटलेस नेटवर्क परत पर प्रसारित होती है"। यह सुंदर है
मोनिका को पुनः स्थापित करें -

मुझे यह जवाब पसंद आया। यह मुद्दे के मूल में कटौती करता है।
जिम डब्ल्यू

@slebetman HTTP सर्वर रहे हैं सॉकेट आधारित। सब के सब हैं। परिभाषा से। और कुकीज़ HTTP सर्वर को स्टेटफुल नहीं बनाते हैं। वास्तव में परिभाषा के अनुसार वे नहीं हैं, यही वजह है कि कुकीज़ को हर बार क्लाइंट द्वारा स्थानांतरित किया जाता है।
मील्स राउत
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.