मुख्य सामग्री पर जाएं

कस्टम Captive Portal: HTML और CSS गाइड

यह आधिकारिक तकनीकी संदर्भ गाइड कस्टम captive portal लैंडिंग पेज को डिजाइन और कोड करने के लिए आवश्यक विकास मानकों, CSS आर्किटेक्चर और नेटवर्क-स्तरीय सीमाओं को रेखांकित करती है। यह फ्रंटएंड डेवलपर्स और नेटवर्क आर्किटेक्ट्स को Apple CNA और Android वेबव्यू वातावरणों को नेविगेट करने के लिए व्यावहारिक रणनीतियां प्रदान करता है, जिससे पिक्सेल-परफेक्ट, अनुपालन और अत्यधिक प्रदर्शन करने वाले अतिथि WiFi अनुभवों को सुनिश्चित किया जा सके।

📖 11 मिनट का पाठ📝 3,775 शब्द🔧 2 हल किए गए उदाहरण3 अभ्यास प्रश्न📚 8 मुख्य परिभाषाएं

इस गाइड को सुनें

पॉडकास्ट ट्रांसक्रिप्ट देखें
कस्टम Captive Portal: HTML और CSS गाइड — एक Purple तकनीकी ब्रीफिंग [INTRODUCTION] Purple तकनीकी ब्रीफिंग श्रृंखला में आपका स्वागत है। आज हम एक ऐसी चीज़ की बारीकियों पर चर्चा कर रहे हैं जो हर एक गेस्ट WiFi परिनियोजन को प्रभावित करती है - Captive Portal। विशेष रूप से, हम इस बारे में बात कर रहे हैं कि कस्टम Captive Portal लैंडिंग पेज के लिए स्पष्ट, विश्वसनीय HTML और CSS कैसे लिखा जाए। यदि आप कभी होटल के WiFi से जुड़े हैं और आपका स्वागत एक टूटे हुए स्प्लैश पेज से हुआ है - जिसमें चित्र गायब हैं, अनस्टाइल किया हुआ टेक्स्ट है, या एक लॉगिन बटन है जो टच करने पर काम नहीं करता है - तो आपने अनुभव किया है कि तब क्या होता है जब कोई डेवलपर उस वातावरण की सीमाओं को समझे बिना पोर्टल बनाता है जिसमें यह चलता है। आज, हम यह सुनिश्चित करने जा रहे हैं कि आपके साथ ऐसा न हो। यह ब्रीफिंग उन फ्रंटएंड डेवलपर्स, क्रिएटिव डिजाइनरों और वेब डेवलपर्स के लिए है जो या तो स्क्रैच से Captive Portal बना रहे हैं या मौजूदा टेम्पलेट को कस्टमाइज़ कर रहे हैं। हम HTML संरचना, महत्वपूर्ण CSS नियमों, Apple CNA मिनी-ब्राउज़र की सीमाओं (जो अनुभवी डेवलपर्स को भी उलझा देती हैं) को कवर करेंगे, और यह भी जानेंगे कि Purple के पोर्टल बिल्डर जैसे प्लेटफॉर्म इस जटिलता को पूरी तरह से कैसे समाप्त कर सकते हैं। आइए इस पर विस्तार से चर्चा करें। [TECHNICAL DEEP-DIVE] सबसे पहले, आइए स्थापित करें कि नेटवर्क स्तर पर वास्तव में Captive Portal क्या है। जब कोई डिवाइस किसी ऐसे WiFi नेटवर्क से जुड़ता है जिसके लिए प्रमाणीकरण की आवश्यकता होती है, तो नेटवर्क HTTP ट्रैफ़िक को रोकता है और उपयोगकर्ता को एक लैंडिंग पेज पर रीडायरेक्ट करता है। यही Captive Portal है। उपयोगकर्ता एक स्प्लैश पेज देखता है, एक क्रिया पूरी करता है - जैसे ईमेल दर्ज करना, शर्तों को स्वीकार करना, सोशल मीडिया के माध्यम से लॉग इन करना - और फिर नेटवर्क पूर्ण इंटरनेट एक्सेस प्रदान करता है। समझने वाली महत्वपूर्ण बात यह है कि यह पेज कहाँ रेंडर होता है। iOS डिवाइस पर, यह Apple के Captive Network Assistant - CNA - के अंदर खुलता है जो कि एक स्ट्रिप्ड-डाउन WebKit वेबव्यू है। यह Safari नहीं है। इसमें कोई स्थायी कुकीज़ नहीं होती हैं। यह बाहरी संसाधनों को लोड नहीं कर सकता। इसमें सीमित JavaScript समर्थन है। और जैसे ही उपयोगकर्ता किसी अन्य ऐप पर स्विच करता है, यह बंद हो जाता है। macOS पर, CNA एक निश्चित 900 गुणा 572 पिक्सल पर रेंडर होता है। Android पर, आधुनिक डिवाइस Chrome Custom Tabs का उपयोग करते हैं, जो काफी अधिक सक्षम हैं। Windows 10 उपयोगकर्ता का डिफॉल्ट ब्राउज़र खोलता है। Samsung डिवाइस Samsung Internet का उपयोग करते हैं। यह प्लेटफ़ॉर्म विखंडन प्रोडक्शन में टूटे हुए Captive Portal का सबसे बड़ा स्रोत है। डेवलपर्स अपने Android फोन पर परीक्षण करते हैं, सब कुछ बढ़िया दिखता है, और फिर होटल के iPhone का उपयोग करने वाले मेहमानों को बिना स्टाइल वाले टेक्स्ट के साथ एक व्हाइट स्क्रीन मिलती है। तो आइए सुरक्षित रूप से कोड करने के बारे में बात करते हैं। Captive Portal के HTML और CSS के लिए सुनहरा नियम यह है: पेज के साथ ऐसा व्यवहार करें जैसे कि इसमें कोई इंटरनेट कनेक्शन न हो। क्योंकि प्रमाणीकरण चरण के दौरान, इसमें इंटरनेट कनेक्शन नहीं होता है। नेटवर्क कैप्टिव है। कोई भी संसाधन जिसे आपका पेज किसी बाहरी URL से लोड करने का प्रयास करता है - जैसे कि एक Google Font, एक CDN-होस्टेड स्टाइलशीट, एक JavaScript लाइब्रेरी, या एक लोगो इमेज - वह चुपचाप विफल हो जाएगा या एक लोडिंग स्पिनर का कारण बनेगा जो कभी हल नहीं होता।HTML संरचना से शुरुआत करते हैं। आपका दस्तावेज़ एक साफ़-सुथरा HTML5 पेज होना चाहिए। head में, आपको एक व्यूपोर्ट मेटा टैग की आवश्यकता होगी जिसका कंटेंट width=device-width और initial-scale=1 पर सेट हो। मोबाइल रेंडरिंग के लिए यह गैर-परक्राम्य है। इसके बिना, iOS पेज को 980 पिक्सेल चौड़ाई में रेंडर करेगा और इसे छोटा कर देगा, जिससे सब कुछ बेहद सूक्ष्म दिखने लगेगा। आपका CSS इनलाइन होना चाहिए - या तो head एलिमेंट के भीतर एक स्टाइल ब्लॉक में, या व्यक्तिगत एलिमेंट्स पर इनलाइन स्टाइल एट्रिब्यूट्स के रूप में। लिंक टैग के माध्यम से जुड़े बाहरी स्टाइलशीट का उपयोग न करें। वह स्टाइलशीट आपके सर्वर पर रहती है, जिस तक Captive Portal ऑथेंटिकेशन के दौरान नहीं पहुंच सकता। पेज पूरी तरह से बिना किसी स्टाइल के रेंडर होगा। फॉन्ट के लिए, सिस्टम फॉन्ट स्टैक का उपयोग करें। कुछ इस तरह: font-family - apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif। यह ब्राउज़र को उपलब्ध सिस्टम फॉन्ट का उपयोग करने के लिए कहता है। Google Fonts का उपयोग न करें। इम्पोर्ट कॉल विफल हो जाएगी, और आपका फ़ॉलबैक फॉन्ट Times New Roman हो जाएगा, जो कि वह ब्रांड अनुभव नहीं है जिसके लिए आपका क्लाइंट भुगतान कर रहा है। इमेज - आपका लोगो, बैकग्राउंड ग्राफिक्स, डेकोरेटिव एलिमेंट्स - के लिए आपके पास दो विकल्प हैं। या तो उन्हें उसी Captive Portal सर्वर से होस्ट करें, जिसका अर्थ है कि वे उसी स्थानीय नेटवर्क पर हैं और ऑथेंटिकेशन पूरा होने से पहले सुलभ हैं। या, इससे भी बेहतर, उन्हें सीधे अपने HTML या CSS में Base64 डेटा URIs के रूप में एन्कोड करें। यह बाहरी निर्भरता को पूरी तरह से समाप्त कर देता है। अब बात करते हैं पेज लेआउट की। चूंकि नब्बे प्रतिशत से अधिक Captive Portal लॉगिन मोबाइल डिवाइस पर होते हैं, इसलिए आपका डिज़ाइन मोबाइल-फर्स्ट होना चाहिए। इसका मतलब है कि एक सिंगल-कॉलम लेआउट, जिसकी अधिकतम चौड़ाई लगभग 480 पिक्सेल हो, जो पेज पर केंद्रित हो। बॉडी एलिमेंट पर फ्लेक्सबॉक्स का उपयोग करें - display flex, flex-direction column, align-items center, justify-content center, min-height 100 viewport height। यह आपके कंटेंट कार्ड को किसी भी स्क्रीन आकार पर वर्टिकल और हॉरिजॉन्टल रूप से केंद्रित करता है। आपके प्राइमरी कॉल-टू-एक्शन बटन को टच-फ्रेंडली होना चाहिए। Apple के ह्यूमन इंटरफ़ेस गाइडलाइन्स न्यूनतम टैप टारगेट 44 x 44 पिक्सेल निर्दिष्ट करते हैं। व्यवहार में, एक प्राइमरी CTA के लिए, आपको लगभग 48 पिक्सेल ऊंचा, कंटेनर के भीतर पूरी चौड़ाई वाला, और लगभग 8 से 12 पिक्सेल के बॉर्डर-रेडियस वाला बटन चाहिए। फ़ॉर्म फ़ील्ड्स - ईमेल इनपुट, नाम इनपुट - के लिए फ़ॉन्ट-साइज़ कम से कम 16 पिक्सेल सेट करें। यह महत्वपूर्ण है। iOS Safari और CNA 16 पिक्सेल से कम फ़ॉन्ट-साइज़ वाले किसी भी इनपुट फ़ील्ड पर स्वचालित रूप से ज़ूम इन कर देंगे, जो आपके सावधानीपूर्वक तैयार किए गए लेआउट को बिगाड़ देता है। फ़ॉन्ट-साइज़ को 16 पिक्सेल या उससे अधिक सेट करने से यह ज़ूम व्यवहार रुक जाता है। कानूनी सहमति (लीगल कंसेंट) अनुभाग पर विशेष ध्यान देने की आवश्यकता है। GDPR के तहत, यदि आप व्यक्तिगत डेटा एकत्र कर रहे हैं - भले ही वह सिर्फ एक ईमेल पता हो - तो आपको स्पष्ट, सूचित सहमति की आवश्यकता होगी। इसका मतलब है कि एक चेकबॉक्स जो डिफ़ॉल्ट रूप से अनचेक हो, और उस पर एक स्पष्ट लेबल हो जो यह बताता हो कि उपयोगकर्ता किस बात के लिए सहमति दे रहा है। चेकबॉक्स को पहले से टिक न करें। सहमति चेकबॉक्स स्वयं बिना स्क्रॉल किए स्पष्ट रूप से दिखाई देना चाहिए।अब, विशेष रूप से iOS CNA के लिए एक महत्वपूर्ण कार्यान्वयन विवरण। जब उपयोगकर्ता प्रमाणीकरण पूरा करता है, तो CNA मॉनिटर करता है कि कैप्टिव डोमेन सुलभ हो गया है या नहीं। यह जांच पूर्ण पेज नेविगेशन द्वारा ट्रिगर होती है, न कि JavaScript AJAX कॉल द्वारा। इसका मतलब यह है कि यदि आप एक सिंगल-पेज ऐप बनाते हैं जो fetch या XMLHttpRequest के माध्यम से फॉर्म सबमिट करता है और पूर्ण पेज रीडायरेक्ट के बिना DOM को अपडेट करता है, तो CNA कभी भी यह पता नहीं लगा पाएगा कि प्रमाणीकरण पूरा हो गया है। प्रमाणीकरण के बाद आपको एक नए URL पर रीडायरेक्ट करना होगा - एक पूर्ण HTTP रीडायरेक्ट, न कि JavaScript DOM मैनिपुलेशन। कैप्टिव पोर्टल विकास में यह सबसे आम गलतियों में से एक है। JavaScript के लिए, इसे न्यूनतम रखें। CNA में सीमित JS सपोर्ट है और localStorage या sessionStorage तक कोई पहुंच नहीं है। CNA बंद होने पर कुकीज़ नष्ट हो जाती हैं। इन ब्राउज़र APIs पर निर्भर रहने वाला कोई भी स्टेट मैनेजमेंट विफल हो जाएगा। वेनिला JavaScript इवेंट लिसनर्स ठीक हैं। jQuery एक 30-किलोबाइट बाहरी डिपेंडेंसी है जो लोड होने में विफल हो जाएगी। [कार्यान्वयन अनुशंसाएँ और नुकसान] मैं आपको व्यावहारिक कार्यान्वयन चेकलिस्ट देता हूँ। पहला: व्यूपोर्ट मेटा टैग, हमेशा। दूसरा: सभी CSS इनलाइन, कोई बाहरी स्टाइलशीट नहीं। तीसरा: सभी छवियां या तो कैप्टिव पोर्टल सर्वर से सर्व की जाएं या Base64-एन्कोडेड हों। चौथा: सिस्टम फ़ॉन्ट स्टैक, कोई वेब फ़ॉन्ट नहीं। पांचवां: सभी इनपुट फ़ील्ड पर न्यूनतम 16 पिक्सेल फ़ॉन्ट आकार। छठा: टच-अनुकूल टैप टारगेट, न्यूनतम 44 गुना 44 पिक्सेल। सातवां: सिंगल कॉलम लेआउट, अधिकतम-चौड़ाई 480 पिक्सेल। आठवां: प्रमाणीकरण पर पूर्ण पेज रीडायरेक्ट, न कि JavaScript स्टेट अपडेट। नौवां: GDPR-अनुपालन सहमति चेकबॉक्स, डिफ़ॉल्ट रूप से अनचेक किया गया। दसवां: ब्राउज़र पूर्वावलोकन के बजाय वास्तविक कैप्टिव नेटवर्क का उपयोग करके वास्तविक iOS डिवाइस पर परीक्षण करें। वे नुकसान जो मैं प्रोडक्शन में सबसे अक्सर देखता हूँ। नंबर एक: Google Fonts - इम्पोर्ट हटा दें, यह विफल हो जाएगा। नंबर दो: बाहरी JavaScript लाइब्रेरी - Bootstrap, jQuery, कोई भी CDN-होस्टेड स्क्रिप्ट विफल हो जाएगी। नंबर तीन: बाहरी स्टाइलशीट में घोषित CSS वेरिएबल्स - वे आपके इनलाइन स्टाइल ब्लॉक में होने चाहिए। नंबर चार: URL द्वारा संदर्भित पृष्ठभूमि छवियां - उन्हें Base64 एन्कोड करें। नंबर पांच: प्रमाणीकरण के बाद रीडायरेक्ट के बिना AJAX फॉर्म सबमिशन - CNA प्रमाणीकरण पूरा होने का पता नहीं लगा पाएगा। अब, खुद बनाने बनाम खरीदने के बारे में स्पष्ट बातचीत। स्क्रैच से एक कस्टम कैप्टिव पोर्टल बनाने का मतलब है कि आप बैकएंड इन्फ्रास्ट्रक्चर - RADIUS सर्वर, डेटाबेस, SSL सर्टिफिकेट, DNS कॉन्फ़िगरेशन, आपके एक्सेस पॉइंट्स के साथ नेटवर्क इंटीग्रेशन और चल रहे सुरक्षा पैचिंग के लिए भी ज़िम्मेदार हैं। यह एक महत्वपूर्ण इंजीनियरिंग प्रतिबद्धता है। Purple का पोर्टल बिल्डर आपको उन डेवलपर्स के लिए एक कस्टम HTML और CSS एडिटर के साथ ड्रैग-एंड-ड्रॉप इंटरफ़ेस देता है जिन्हें पिक्सेल-परफेक्ट नियंत्रण की आवश्यकता होती है, जबकि यह सभी बैकएंड इन्फ्रास्ट्रक्चर - प्रमाणीकरण, डेटा कैप्चर, एनालिटिक्स, GDPR अनुपालन टूलिंग, और 200 से अधिक एक्सेस पॉइंट विक्रेताओं के साथ नेटवर्क इंटीग्रेशन को संभालता है। आपको इन्फ्रास्ट्रक्चर ओवरहेड के बिना रचनात्मक नियंत्रण मिलता है। [रैपिड-फायर प्रश्न और उत्तर] क्या मैं captive portal में CSS Grid का उपयोग कर सकता हूँ? हाँ, लेकिन विशेष रूप से iOS CNA पर इसका परीक्षण करें। पुराने WebKit संस्करणों में Flexbox को अधिक व्यापक समर्थन प्राप्त है। क्या मैं SVG लोगो का उपयोग कर सकता हूँ? हाँ, इनलाइन SVGs पूरी तरह से समर्थित हैं और लोगो के लिए Base64-encoded PNGs की तुलना में बेहतर हैं क्योंकि वे रेटिना डिस्प्ले पर पूरी तरह से स्केल होते हैं। क्या macOS CNA भी iOS CNA जैसे ही प्रतिबंधों का समर्थन करता है? व्यापक रूप से हाँ, एक अंतर के साथ: macOS CNA एक निश्चित 900 गुणा 572 पिक्सेल विंडो पर रेंडर होता है। क्या मैं Tailwind जैसे CSS फ्रेमवर्क का उपयोग कर सकता हूँ? केवल तभी जब आप एक पर्ज्ड, सेल्फ-कंटेन्ड CSS फ़ाइल जनरेट करते हैं और इसे अपने स्टाइल ब्लॉक में इनलाइन करते हैं। HTTPS के बारे में क्या? प्रारंभिक रीडायरेक्ट काम करने के लिए आपका captive portal आवश्यक रूप से HTTP पर होस्ट होना चाहिए - HTTPS कनेक्शन को कैप्टिव नेटवर्क द्वारा इंटरसेप्ट नहीं किया जा सकता है। [सारांश और अगले कदम] आज की ब्रीफिंग का सारांश। एक कस्टम captive portal एक सीमित वेब वातावरण है, न कि एक मानक ब्राउज़र संदर्भ। Apple CNA और Android वेबव्यू बाहरी संसाधनों, कुकीज़, JavaScript और सेशन स्टेट पर कड़े प्रतिबंध लगाते हैं। इसका समाधान इनलाइन CSS, सिस्टम फ़ॉन्ट्स, Base64-encoded इमेज और प्रमाणीकरण पर फुल-पेज रीडायरेक्ट के साथ सेल्फ-कंटेन्ड HTML पेजों का निर्माण करना है। स्थान संचालकों और IT टीमों के लिए जो अपने विकल्पों का मूल्यांकन कर रहे हैं: यदि आपकी आवश्यकता कस्टम HTML और CSS के साथ पूरी तरह से ब्रांडेड, बेस्पोक पोर्टल की है, तो विकल्प खुद पूरे स्टैक को बनाने और उसका रखरखाव करने के बीच है - जो कि एक बड़ा इंजीनियरिंग प्रयास है - या Purple जैसे प्लेटफ़ॉर्म का उपयोग करने के बीच है जो प्रोडक्शन-ग्रेड बैकएंड इन्फ्रास्ट्रक्चर के शीर्ष पर कस्टम HTML और CSS संपादन क्षमता प्रदान करता है। यहाँ से अगले कदम: Purple के पोर्टल संपादक दस्तावेज़ों की समीक्षा करें, आज हमारे द्वारा कवर की गई मोबाइल-फ़र्स्ट चेकलिस्ट के विरुद्ध अपने मौजूदा पोर्टल का ऑडिट करें, और यदि आप शुरुआत से शुरुआत कर रहे हैं, तो हमारे द्वारा आउटलाइन की गई HTML टेम्पलेट संरचना का अपने बेसलाइन के रूप में उपयोग करें। सुनने के लिए धन्यवाद, और हम आपको अगली ब्रीफिंग में मिलेंगे।

📚 हमारी मुख्य श्रृंखला का हिस्सा: Captive Portals के लिए अंतिम गाइड

header_image.png

कार्यकारी सारांश (Executive Summary)

लक्ज़री होटलों Hospitality और रिटेल चेन Retail से लेकर ट्रांजिट हब Transport और आधुनिक मेडिकल परिसरों Healthcare जैसे एंटरप्राइज स्थानों के लिए - गेस्ट WiFi स्प्लैश पेज ही डिजिटल प्रवेश द्वार होता है। हालांकि, 90% से अधिक गेस्ट WiFi लॉग इन मोबाइल डिवाइस पर होते हैं, जहाँ रेंडरिंग मानक ब्राउज़र जैसे Safari या Chrome द्वारा नहीं, बल्कि अत्यधिक प्रतिबंधित Captive Network Assistant (CNA) वेबव्यू [1] द्वारा नियंत्रित होती है। ये "मिनी-ब्राउज़र" गंभीर सैंडबॉक्स सीमाएं लागू करते हैं: वे बाहरी CDNs को ब्लॉक करते हैं, लगातार कुकीज़ को अक्षम करते हैं, बाहरी वेब फ़ॉन्ट्स को अनदेखा करते हैं, और सुरक्षा जोखिमों को कम करने व सेशन हाइजैकिंग को रोकने के लिए JavaScript निष्पादन को गंभीर रूप से प्रतिबंधित करते हैं [2]।

जब एक डेवलपर पारंपरिक वेब मानकों का उपयोग करके एक स्प्लैश पेज डिज़ाइन करता है, तो इन बाधाओं के परिणामस्वरूप लेआउट टूटने लगते हैं, ब्रांड एसेट गायब हो जाते हैं, और लॉगिन बटन काम नहीं करते हैं, जिससे सीधे तौर पर ग्राहकों की संतुष्टि और डिजिटल जुड़ाव प्रभावित होता है। यह गाइड इन चुनौतियों के समाधान प्रदान करती है, जिसमें सुरक्षात्मक कोडिंग पद्धतियां - जैसे इनलाइन CSS, Base64 एसेट एन्कोडिंग, सिस्टम फ़ॉन्ट स्टैक और स्पष्ट नेविगेशन-संचालित प्रमाणीकरण हैंडशेक शामिल हैं - ताकि निर्बाध क्रॉस-प्लेटफ़ॉर्म रेंडरिंग सुनिश्चित की जा सके। इसके अलावा, हम यह भी विश्लेषण करते हैं कि कैसे Purple के पोर्टल बिल्डर जैसे प्रबंधित समाधान का उपयोग करके डेवलपर्स RADIUS प्रमाणीकरण, डेटाबेस स्केलिंग, GDPR/PCI अनुपालन और मल्टी-वेंडर AP एकीकरणों का बोझ हटाते हुए HTML/CSS पर पूर्ण रचनात्मक नियंत्रण बनाए रख सकते हैं [3]।

तकनीकी गहन विश्लेषण (Technical Deep-Dive)

एक लचीला कस्टम कैप्टिव पोर्टल बनाने के लिए, डेवलपर्स को नेटवर्क-स्तरीय इंटरसेप्शन और ब्राउज़र वर्चुअलाइजेशन को समझना चाहिए जो तब होता है जब कोई गेस्ट एक ओपन SSID से जुड़ता है।

कैप्टिव पोर्टल लाइफसाइकिल

जब कोई क्लाइंट डिवाइस किसी कैप्टिव SSID से जुड़ता है, तो निम्नलिखित अनुक्रम सक्रिय होता है:

  1. IP एसोसिएशन: डिवाइस 3-वे हैंडशेक पूरा करता है और DHCP के माध्यम से एक IP एड्रेस का अनुरोध करता है।
  2. सक्रिय कनेक्टिविटी जांच (Active Connectivity Probe): ऑपरेटिंग सिस्टम का बैकग्राउंड नेटवर्क मैनेजर तुरंत एक समर्पित वेंडर-न्यूट्रल कैनरी URL (जैसे, Apple का http://captive.apple.com/hotspot-detect.html या Google का http://connectivitycheck.gstatic.com/generate_204) पर एक HTTP GET अनुरोध भेजता है [1]।
  3. DNS/HTTP इंटरसेप्शन: स्थानीय वायरलेस लैन कंट्रोलर (WLC) या एक्सेस पॉइंट (AP) इस पोर्ट 80 HTTP अनुरोध को इंटरसेप्ट करता है। अपेक्षित HTTP 200 या 204 स्टेटस वापस करने के बजाय, गेटवे HTTP 302 रीडायरेक्ट के माध्यम से क्लाइंट के ट्रैफ़िक को कैप्टिव पोर्टल के लैंडिंग पेज URL पर रीडायरेक्ट करता है [2]।
  4. वेबव्यू स्पॉनिंग (Webview Spawning): रीडायरेक्ट का पता चलते ही, OS रीडायरेक्ट किए गए स्प्लैश पेज को प्रदर्शित करने के लिए अपने मूल Captive Network Assistant (CNA) मिनी-ब्राउज़र को स्पॉन करता है, जिससे उपयोगकर्ता को मैन्युअल रूप से एक पूर्ण ब्राउज़र खोलने की आवश्यकता नहीं होती है।5. प्रमाणीकरण और स्थिति परिवर्तन: उपयोगकर्ता लॉगिन फ़ॉर्म को पूरा करता है, पोर्टल सर्वर पर क्रेडेंशियल्स सबमिट करता है, जो गेटवे को MAC एड्रेस को अधिकृत करने का निर्देश देता है (अक्सर RADIUS Access-Accept या बाहरी API कॉल के माध्यम से)।
  5. CNA एक्जिट हैंडशेक: CNA मिनी-ब्राउज़र अपने कैनरी URL पर एक और HTTP GET निष्पादित करता है। यदि इसे अपेक्षित 200/204 प्रतिक्रिया प्राप्त होती है, तो यह अपने ऊपरी-दाएं बटन को "Cancel" से बदलकर "Done" कर देता है और WiFi कनेक्शन को प्राथमिक नेटवर्क इंटरफ़ेस के रूप में स्थापित करता है।

प्लेटफ़ॉर्म - विशिष्ट मिनी-ब्राउज़र सीमाएं

प्रत्येक ऑपरेटिंग सिस्टम विभिन्न वेबव्यू परिवेशों के भीतर इस लाइफसाइकिल को संभालता है, जिसके परिणामस्वरूप अत्यधिक खंडित व्यवहार होता है। नीचे दी गई तालिका इन महत्वपूर्ण सीमाओं का विवरण देती है:

प्लेटफ़ॉर्म / वेबव्यू प्रदर्शन विधि लगातार कुकीज़ बाहरी वेब फ़ॉन्ट्स JavaScript निष्पादन विंडो आयाम एक्जिट हैंडशेक ट्रिगर
Apple iOS CNA (Websheet) मिनी-ब्राउज़र पॉपअप अवरुद्ध (बंद होने पर नष्ट) अवरुद्ध (ऑफ़लाइन) सीमित (कोई localStorage/sessionStorage नहीं) रिस्पॉन्सिव (डिवाइस-चौड़ाई) केवल पूर्ण-पृष्ठ HTTP रीडायरेक्ट [1]
Apple macOS CNA (Captive Network Assistant) मिनी-ब्राउज़र पॉपअप अवरुद्ध अवरुद्ध सीमित (कोई alert/confirm संवाद नहीं) निश्चित (900px x 572px) केवल पूर्ण-पृष्ठ HTTP रीडायरेक्ट
Android (Google) (CaptivePortalLogin) पुश नोटिफिकेशन -> Chrome कस्टम टैब स्वीकृत (Chrome के साथ साझा) स्वीकृत (यदि वॉल्ड गार्डन में श्वेतसूचीबद्ध हो) पूर्ण रिस्पॉन्सिव स्वचालित (Captive Portal API / 204 चेक) [2]
Samsung Android (Samsung Internet) पुश नोटिफिकेशन -> मिनी-ब्राउज़र स्वीकृत स्वीकृत पूर्ण रिस्पॉन्सिव स्वचालित
Windows 10/11 (डिफ़ॉल्ट ब्राउज़र) ऑटो-लॉन्च डिफ़ॉल्ट ब्राउज़र स्वीकृत (पूर्ण ब्राउज़र संदर्भ) स्वीकृत पूर्ण रिस्पॉन्सिव मैन्युअल / स्वचालित

cna_constraints_comparison.png

Apple CNA "Done" बटन ट्रैप के लिए कोडिंग

कस्टम पोर्टल विकास में सबसे लगातार विफल होने वाले तरीकों में से एक iOS डिवाइसों पर "Done" बटन ट्रैप है। जब कोई उपयोगकर्ता प्रमाणित होता है, तो iOS Websheet वेबव्यू को यह पता लगाना चाहिए कि नेटवर्क अब कैप्टिव नहीं है। यह अपने बैकग्राउंड कैनरी अनुरोधों की सफलता की निगरानी करके ऐसा करता है।महत्वपूर्ण रूप से, iOS CNA केवल एक पूर्ण-पेज HTTP नेविगेशन (लोकेशन रीडायरेक्ट) पर ही इस जांच को ट्रिगर करेगा। यदि कोई डेवलपर एक आधुनिक सिंगल पेज एप्लीकेशन (SPA) बनाता है जो एक एसिंक्रोनस AJAX कॉल (जैसे, fetch() या Axios) के माध्यम से फ़ॉर्म डेटा सबमिट करता है और URL को बदले बिना DOM को गतिशील रूप से अपडेट करता है, तो CNA अपनी कनेक्टिविटी जांच को कभी भी दोबारा नहीं चलाएगा। उपयोगकर्ता को गेटवे स्तर पर प्रमाणित किया जाएगा, लेकिन ऊपरी-दाएं कोने में CNA बटन "Cancel" के रूप में बना रहेगा। यदि हताश उपयोगकर्ता "Cancel" पर क्लिक करता है, तो iOS डिवाइस तुरंत SSID से अलग हो जाएगा, जिससे WiFi सत्र समाप्त हो जाएगा [1]।

इसे रोकने के लिए, प्रमाणीकरण सफलता हैंडलर को एक भौतिक लैंडिंग पेज पर पूर्ण-पेज रीडायरेक्ट करना चाहिए (जैसे, window.location.href = '/success') या एक मानक HTTP POST एक्शन के माध्यम से मूल रूप से लॉगिन फ़ॉर्म सबमिट करना चाहिए।

कार्यान्वयन गाइड

सभी प्लेटफॉर्म पर लगातार रेंडरिंग सुनिश्चित करने के लिए, डेवलपर्स को आधुनिक, भारी-एसेट वाले वेब डिज़ाइन से हटकर एक अत्यधिक आत्मनिर्भर, सुरक्षात्मक कोडिंग शैली को अपनाना चाहिए।

स्वर्णिम नियम: शून्य इंटरनेट कनेक्टिविटी के लिए डिज़ाइन करें

कैप्टिव स्थिति के दौरान, क्लाइंट डिवाइस के पास व्यापक इंटरनेट तक कोई पहुंच नहीं होती है। यह केवल वायरलेस कंट्रोलर के Walled Garden में स्पष्ट रूप से श्वेतसूचीबद्ध (whitelisted) IP पतों और डोमेन को हल और एक्सेस कर सकता है (जैसे कि स्वयं Captive Portal सर्वर का IP)। इसलिए, आपके HTML में संदर्भित कोई भी बाहरी एसेट लोड होने में विफल हो जाएगी, जिसके परिणामस्वरूप लेआउट खराब हो जाएगा।

सुरक्षात्मक रूप से डिज़ाइन करने के लिए, निम्नलिखित मोबाइल-फर्स्ट Captive Portal डिज़ाइन चेकलिस्ट को लागू करें:

mobile_first_checklist.png

1. Viewport कॉन्फ़िगरेशन

मोबाइल डिवाइस को डेस्कटॉप चौड़ाई (आमतौर पर 980px) तक व्यूपोर्ट को छोटा करने से रोकने के लिए, HTML <head> में एक रिस्पॉन्सिव व्यूपोर्ट मेटा टैग शामिल होना चाहिए। इसके बिना, मोबाइल उपकरणों पर टेक्स्ट और इनपुट फ़ील्ड बहुत छोटे दिखाई देंगे:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

2. CSS को इनलाइन करना और बाहरी निर्भरता को हटाना

कभी भी बाहरी CSS फ़ाइलों या CDNs (जैसे, Bootstrap, Tailwind, या Google Fonts) से लिंक न करें। सभी CSS को HTML <head> के भीतर एक <style> ब्लॉक में एम्बेड किया जाना चाहिए।

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

body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    background-color: #F5F1ED; /* Pearl White Brand Colour */
    color: #011638; /* Dark Blue Brand Colour */
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-height: 100vh;
}

3. Base64 एसेट एन्कोडिंग

इमेज, लोगो और आइकन को बाहरी HTTP URL के माध्यम से तब तक संदर्भित नहीं किया जाना चाहिए जब तक कि होस्टिंग डोमेन को गेटवे के वॉल्ड गार्डन में व्हाइटलिस्ट न किया गया हो। सबसे विश्वसनीय तरीका छोटे विज़ुअल एसेट्स (जैसे कि PNG या SVG लोगो) को सीधे HTML या CSS में Base64 डेटा URIs के रूप में एन्कोड करना है:

<!-- Inline Base64 Logo Example -->
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI0MCIgZmlsbD0iIzc0NThGRCIvPjwvc3ZnPg==" alt="Purple Logo" class="brand-logo">

4. इनपुट फ़ील्ड और टैप टारगेट ऑप्टिमाइज़ेशन

मोबाइल उपयोगिता मानकों (जैसे Apple के ह्यूमन इंटरफ़ेस गाइडलाइन्स) का अनुपालन करने के लिए, सभी इंटरैक्टिव तत्वों को स्पर्श इनपुट के लिए ऑप्टिमाइज़ किया जाना चाहिए:

  • इनपुट फ़ॉन्ट आकार: इनपुट टेक्स्ट फ़ॉन्ट आकार कम से कम 16px होना चाहिए। यदि फ़ॉन्ट आकार कम है (जैसे, 14px), तो iOS Safari और CNA फ़ोकस किए जाने पर इनपुट फ़ील्ड को स्वचालित रूप से ज़ूम इन कर देंगे, जिससे पेज लेआउट खराब हो जाएगा [1]।
  • टैप टारगेट: अनजाने में होने वाले क्लिक या उपयोगकर्ता की निराशा को रोकने के लिए बटन, चेकबॉक्स और लिंक का न्यूनतम स्पर्श लक्ष्य क्षेत्र 44px x 44px होना चाहिए।

5. कानूनी सहमति और GDPR अनुपालन

अतिथि डेटा (जैसे, ईमेल, फ़ोन नंबर, या सोशल प्रोफ़ाइल) कैप्चर करते समय, HTML संरचना को स्पष्ट कानूनी सहमति का समर्थन करना चाहिए। GDPR के तहत, पहले से टिक किए गए चेकबॉक्स या अंतर्निहित सहमति वाले कथन (जैसे, "लॉग इन करके, आप हमारी शर्तों से सहमत होते हैं") गैर-अनुपालक हैं [3]।

  • नियम और शर्तों (Terms & Conditions) और गोपनीयता नीतियों (Privacy Policies) के लिए डिफ़ॉल्ट-रूप-से-अनचेक चेकबॉक्स प्रदान करें।
  • मुख्य लॉगिन फ़ॉर्म को स्क्रीन के मुख्य हिस्से (above the fold) पर बनाए रखने के लिए विस्तृत कानूनी टेक्स्ट को स्क्रॉल करने योग्य, सीमित-ऊंचाई वाले कंटेनर (max-height: 120px; overflow-y: auto;) में रखें।
<div class="consent-container">
    <input type="checkbox" id="terms_consent" name="terms_consent" required>
    <label for="terms_consent">
        I explicitly agree to the <a href="#" onclick="showTerms()">Terms of Service</a> and consent to the processing of my data in accordance with the <a href="#" onclick="showPrivacy()">Privacy Policy</a>.
    </label>
</div>

कस्टम Captive Portal HTML/CSS टेम्पलेट

नीचे एक संपूर्ण, प्रोडक्शन-रेडी, सिंगल-फ़ाइल HTML/CSS टेम्पलेट दिया गया है जिसमें सभी मोबाइल-फ़र्स्ट, CNA-अनुपालक सर्वोत्तम प्रथाओं को शामिल किया गया है। इसमें एक रिस्पॉन्सिव लेआउट, सिस्टम फ़ॉन्ट स्टैक, Base64-रेडी एसेट प्लेसहोल्डर्स, टच-फ्रेंडली इनपुट और स्पष्ट GDPR-अनुपालक सहमति संरचनाएं शामिल हैं:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>Guest WiFi Login</title>
    <style>
        /* CSS Reset & Variable Declarations */
        :root {
            --color-primary: #7458FD; /* Purple Brand Colour */
            --color-dark: #011638; /* Dark Blue */
            --color-light: #F5F1ED; /* Pearl White */
            --color-white: #FFFFFF;
            --color-border: #D1D5DB;
            --radius-container: 12px;
            --radius-element: 6px;
        }
        
        * {
            box-sizing: border-box;
            -webkit-tap-highlight-color: transparent;
        }
        
        body {
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
            background-color: var(--color-light);
            color: var(--color-dark);
            margin: 0;
            padding: 20px;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            min-height: 100vh;
        }
        
        /* अनुकूलनशील कार्ड लेआउट */
        .portal-card {
            background-color: var(--color-white);
            width: 100%;
            max-width: 420px;
            padding: 32px 24px;
            border-radius: var(--radius-container);
            box-shadow: 0 4px 20px rgba(1, 22, 56, 0.05);
            text-align: center;
        }
        
        .logo-container {
            margin-bottom: 24px;
        }
        
        /* एम्बेडेड बेस64 लोगो प्लेसहोल्डर */
        .logo {
            width: 120px;
            height: auto;
        }
        
        h1 {
            font-size: 24px;
            font-weight: 700;
            margin: 0 0 8px 0;
            color: var(--color-dark);
        }
        
        p {
            font-size: 14px;
            color: #4B5563;
            margin: 0 0 24px 0;
            line-height: 1.5;
        }
        
        /* फॉर्म शैलियाँ */
        .form-group {
            text-align: left;
            margin-bottom: 16px;
        }
        
        label {
            display: block;
            font-size: 14px;
            font-weight: 600;
            margin-bottom: 6px;
            color: var(--color-dark);
        }
        
        /* महत्वपूर्ण: iOS ऑटो-ज़ूम को रोकने के लिए फ़ॉन्ट का आकार कम से कम 16px होना चाहिए */
        input[type="email"],
        input[type="text"] {
            width: 100%;
            height: 48px;
            padding: 12px 16px;
            font-size: 16px;
            border: 1px solid var(--color-border);
            border-radius: var(--radius-element);
            background-color: var(--color-white);
            color: var(--color-dark);
            outline: none;
            transition: border-color 0.2s;
        }
        
        input[type="email"]:focus,
        input[type="text"]:focus {
            border-color: var(--color-primary);
            box-shadow: 0 0 0 3px rgba(116, 88, 253, 0.15);
        }
        
        /* सहमति शैलियाँ */
        .consent-group {
            display: flex;
            align-items: flex-start;
            text-align: left;
            margin: 20px 0;
        }
        
        /* स्पर्श-अनुकूल लक्ष्य आकार */
        input[type="checkbox"] {
            width: 20px;
            height: 20px;
            margin: 2px 12px 0 0;
            flex-shrink: 0;
            cursor: pointer;
            accent-color: var(--color-primary);
        }
        
        .consent-label {
            font-size: 13px;
            line-height: 1.4;
            color: #4B5563;
            user-select: none;
        }
        
        .consent-label a {
            color: var(--color-primary);
            text-decoration: none;
            font-weight: 600;
        }
        
        .consent-label a:hover {
            text-decoration: underline;
        }
        
        /* Touch-Friendly CTA Button (Minimum 44px height) */
        .btn-submit {
            width: 100%;
            height: 48px;
            background-color: var(--color-primary);
            color: var(--color-white);
            border: none;
            border-radius: var(--radius-element);
            font-size: 16px;
            font-weight: 600;
            cursor: pointer;
            transition: background-color 0.2s;
            display: flex;
            align-items: center;
            justify-content: center;
        }
        
        .btn-submit:hover {
            background-color: #5B3EE3;
        }
        
        .btn-submit:active {
            background-color: #4A2FD4;
        }
        
        /* Legal Terms Scrollbox */
        .terms-scrollbox {
            display: none; /* Toggled via JS */
            text-align: left;
            font-size: 11px;
            color: #6B7280;
            background-color: var(--color-light);
            padding: 12px;
            border-radius: var(--radius-element);
            max-height: 100px;
            overflow-y: auto;
            margin-bottom: 16px;
            border: 1px solid var(--color-border);
        }
        
        .footer {
            margin-top: 24px;
            font-size: 11px;
            color: #9CA3AF;
        }
    </style>
</head>
<body>

    <div class="portal-card">
        <div class="logo-container">
            <!-- Replace src with your actual Base64-encoded SVG or PNG -->
            <svg class="logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 30">
                <rect width="100" height="30" rx="6" fill="#7458FD"/>
                <text x="50" y="20" font-family="sans-serif" font-size="12" fill="#FFFFFF" font-weight="bold" text-anchor="middle">YOUR BRAND</text>
            </svg>
        </div>
        
        <h1>अतिथि WiFi में आपका स्वागत है</h1>
        <p>सुरक्षित, हाई-स्पीड इंटरनेट एक्सेस प्राप्त करने के लिए कृपया नीचे अपना विवरण दर्ज करें।</p>
        
        <!-- Form must submit natively (full page navigation) to clear Apple CNA -->
        <form action="/login/submit" method="POST" onsubmit="return validateForm()">
            <div class="form-group">
                <label for="guest_name">पूरा नाम</label>
                <input type="text" id="guest_name" name="name" placeholder="John Doe" required autocomplete="name">
            </div>
            
            <div class="form-group">
                <label for="guest_email">ईमेल पता</label>
                <input type="email" id="guest_email" name="email" placeholder="john@example.com" required autocomplete="email">
            </div>
            
            <div class="consent-group">
                <input type="checkbox" id="terms_consent" name="terms_accepted" required>
                <label for="terms_consent" class="consent-label">
                    मैं <a href="#" onclick="toggleTerms(event)">सेवा की शर्तों</a> को स्वीकार करता हूँ और GDPR विनियमों के अनुपालन में डेटा प्रोसेसिंग के लिए सहमति देता हूँ।
                </label>
            </div>
            
            <div id="terms_box" class="terms-scrollbox">
                <strong>WiFi सेवा की शर्तें:</strong><br>
                1. यह सेवा बिना किसी वारंटी के "जैसी है वैसी ही" प्रदान की जाती है।<br>
                2. उपयोगकर्ताओं को अवैध बैंडविड्थ-गहन गतिविधियों में शामिल नहीं होना चाहिए।<br>
                3. हमारी गोपनीयता नीति के अनुपालन में व्यक्तिगत डेटा केवल प्रमाणीकरण और मार्केटिंग ऑप्ट-इन के लिए एकत्र किया जाता है।
            </div>
            
            <button type="submit" class="btn-submit">WiFi से कनेक्ट करें</button>
        </form>
        
        <div class="footer">
            Purple द्वारा संचालित | Secure Guest WiFi
        </div>
    </div>

    <script>
        function toggleTerms(e) {
            e.preventDefault();
            var box = document.getElementById('terms_box');
            box.style.display = (box.style.display === 'block') ? 'none' : 'block';
        }
        
        function validateForm() {
            var consent = document.getElementById('terms_consent');
            if (!consent.checked) {
                alert('कनेक्ट करने के लिए आपको सेवा की शर्तों को स्वीकार करना होगा।');
                return false;
            }
            return true;
        }
    </script>
</body>
</html>

समस्या निवारण और जोखिम न्यूनीकरण

कस्टम-कोडेड HTML/CSS Captive Portal तैनात करते समय, IT संचालन टीमों को अक्सर कई गंभीर परिचालन जोखिमों का सामना करना पड़ता है:

1. SSL/TLS प्रमाणपत्र चेतावनी लूप

चूंकि Captive Portal ट्रैफ़िक को रोककर काम करते हैं, इसलिए वे आधुनिक HTTPS वेब सुरक्षा के साथ एक मौलिक टकराव पैदा करते हैं। जब कोई उपयोगकर्ता HTTPS साइट (जैसे, https://www.google.com) पर जाने का प्रयास करता है, और गेटवे उस ट्रैफ़िक को HTTP Captive Portal पर रीडायरेक्ट करने का प्रयास करता है, तो ब्राउज़र SSL प्रमाणपत्र में विसंगति का पता लगाता है और एक महत्वपूर्ण "आपका कनेक्शन निजी नहीं है" सुरक्षा चेतावनी प्रदर्शित करता है।

  • न्यूनीकरण: कभी भी HTTPS ट्रैफ़िक को सीधे रोकने का प्रयास न करें। पूरी तरह से ऑपरेटिंग सिस्टम के मूल CNA हेल्पर पर भरोसा करें (जो रीडायरेक्ट को ट्रिगर करने के लिए एक अनएन्क्रिप्टेड HTTP अनुरोध करता है)। सुनिश्चित करें कि आपके Captive Portal के डोमेन के पास एक वैध, सार्वजनिक रूप से विश्वसनीय SSL प्रमाणपत्र (जैसे, Let's Encrypt या DigiCert) है और प्रारंभिक HTTP रीडायरेक्ट द्वारा उपयोगकर्ता को आपके पोर्टल डोमेन पर सफलतापूर्वक भेजने के बाद ही इसे HTTPS पर परोसा जाए [2]।

2. DNS रिज़ॉल्यूशन विफलताएँ (वॉल्ड गार्डन ट्रैप)

यदि आपका कस्टम HTML पेज बाहरी संसाधनों को संदर्भित करता है - जैसे कि सोशल लॉगिन OAuth एंडपॉइंट (जैसे, Facebook, Google) या भुगतान गेटवे - तो इन डोमेन के लिए DNS अनुरोध तब तक विफल रहेंगे जब तक कि उन्हें वायरलेस कंट्रोलर के Walled Garden में स्पष्ट रूप से श्वेतसूचीबद्ध नहीं किया जाता है। यदि कोई डोमेन श्वेतसूची से गायब है, तो लॉगिन प्रक्रिया रुक जाएगी और एक खाली स्क्रीन दिखाई देगी।

  • समाधान: एक सख्त, न्यूनतम Walled Garden सूची बनाए रखें। यदि सोशल लॉगिन का उपयोग कर रहे हैं, तो पहचान प्रदाताओं द्वारा अनुशंसित विशिष्ट वाइल्डकार्ड डोमेन (जैसे, *.google.com, *.gstatic.com) को श्वेतसूची में डालें।

3. सत्र समय-समाप्ति (Session Timeout) और MAC स्पूफिंग कमजोरियां

मानक Captive Portal उपकरणों को उनके MAC पतों के आधार पर प्रमाणित करते हैं। हालाँकि, आधुनिक मोबाइल ऑपरेटिंग सिस्टम (iOS 14+ और Android 10+) डिफ़ॉल्ट रूप से रैंडमाइज्ड MAC पतों (प्राइवेट WiFi पतों) का उपयोग करते हैं, और उन्हें समय-समय पर बदलते रहते हैं। इसके कारण मेहमानों को बार-बार पुनः प्रमाणित करने के लिए प्रेरित किया जा सकता है, जिससे उपयोगकर्ता का अनुभव खराब होता है [1]।

  • समाधान: बासी सत्रों को रोकने के लिए RADIUS सर्वर पर उचित सत्र समय-समाप्ति (जैसे, 24 घंटे) लागू करें, और एक निर्बाध, सुरक्षित ऑनबोर्डिंग के लिए Passpoint (Hotspot 2.0) या WPA3-Enterprise जैसे आधुनिक प्रमाणीकरण मानकों का उपयोग करें जो MAC-आधारित Captive Portal को पूरी तरह से बायपास करते हैं।

Purple उत्पाद प्रासंगिकता: स्वयं निर्माण बनाम खरीदारी (Build vs. Buy)

यद्यपि एक एकल HTML पेज को कोड करना आसान है, लेकिन एक कस्टम Captive Portal इन्फ्रास्ट्रक्चर को होस्ट करना, सुरक्षित करना और स्केल करना भारी तकनीकी और अनुपालन बाधाओं को प्रस्तुत करता है। नीचे दी गई तालिका स्वयं-होस्ट किए गए कस्टम पोर्टल बनाम Purple के प्रबंधित एंटरप्राइज़ प्लेटफ़ॉर्म का उपयोग करने की इंजीनियरिंग और परिचालन वास्तविकताओं की तुलना करती है:

सुविधा / परिचालन आवश्यकता स्वयं-होस्ट किया गया कस्टम पोर्टल Purple एंटरप्राइज़ WiFi प्लेटफ़ॉर्म
HTML/CSS कस्टमाइज़ेशन पूरी तरह से मैन्युअल कोडिंग, व्यक्तिगत APs या स्थानीय वेब सर्वर पर फ़ाइलें अपलोड करना। पिक्सेल-परफेक्ट डेवलपर एडिटर जो ड्रैग-एंड-ड्रॉप विज़ुअल बिल्डर के साथ कस्टम HTML/CSS इंजेक्ट की अनुमति देता है।
RADIUS इन्फ्रास्ट्रक्चर अत्यधिक उपलब्ध FreeRADIUS या क्लाउड RADIUS सर्वर को तैनात, कॉन्फ़िगर और बनाए रखना होगा [4]। अंतर्निहित, विश्व स्तर पर वितरित, क्लाउड-नेटिव RADIUS जिसमें एक्टिव-एक्टिव रिडंडेंसी और 99.99% अपटाइम SLAs शामिल हैं।
मल्टी-वेंडर AP सपोर्ट प्रत्येक हार्डवेयर वेंडर (Cisco, Aruba, Meraki, Ruckus) के लिए कस्टम इंटीग्रेशन स्क्रिप्ट की आवश्यकता होती है [5]। 200 से अधिक हार्डवेयर मॉडलों के साथ नेटिव, आउट-ऑफ-द-बॉक्स एकीकरण; मिश्रित-हार्डवेयर संपत्तियों में एकीकृत पोर्टल परिनियोजन।
डेटा गोपनीयता और अनुपालन स्थान GDPR, CCPA, और PCI-DSS अनुपालन के लिए 100% कानूनी दायित्व लेता है, जिसमें सुरक्षित डेटाबेस एन्क्रिप्शन और डेटा हटाने के वर्कफ़्लो शामिल हैं। डिज़ाइन द्वारा पूरी तरह से अनुपालन। अंतर्निहित सहमति प्रबंधन, स्वचालित डेटा-विषय हटाने के अनुरोध, और सुरक्षित ISO 27001-प्रमाणित होस्टिंग।
एनालिटिक्स और मार्केटिंग कस्टम डेटा इंजेशन पाइपलाइन बनाने और तीसरे पक्ष के मार्केटिंग टूल को एकीकृत करने की आवश्यकता होती है। रियल-टाइम फुटफॉल ट्रैकिंग, रिटर्न-रेट मेट्रिक्स और ऑटोमेटेड मार्केटिंग कैंपेन ट्रिगर्स के साथ Enterprise-grade analytics dashboard [6]।
आइडेंटिटी प्रोवाइडर इंटीग्रेशन Google, Facebook, Apple और स्थानीय SMS गेटवे के साथ मैन्युअल OAuth2 इंटीग्रेशन। कॉर्पोरेट मेहमानों के लिए प्रमुख सोशल प्लेटफॉर्म, SMS गेटवे और Azure AD / Okta के साथ एक-क्लिक इंटीग्रेशन

Purple का प्लेटफॉर्म "बिल्ड बनाम बाय" की दुविधा को हल करता है। यह डेवलपर्स को एक कस्टम HTML/CSS वर्कस्पेस की पूरी रचनात्मक स्वतंत्रता प्रदान करता है, जबकि बड़े पैमाने पर सुरक्षित RADIUS प्रमाणीकरण का समर्थन करने के लिए आवश्यक जटिल, उच्च-जोखिम वाले बैकएंड इन्फ्रास्ट्रक्चर इंजीनियरिंग को समाप्त करता है।

ROI और व्यावसायिक प्रभाव

एक व्यावसायिक रूप से इंजीनियर, रिस्पॉन्सिव कस्टम Captive Portal में निवेश करने से IT संचालन, मार्केटिंग और कानूनी अनुपालन में मात्रात्मक लाभ मिलता है।

1. परिचालन लागत में कमी (IT हेल्पडेस्क टिकट)

स्टेडियम या मल्टी-साइट रिटेल चेन जैसे बड़े पैमाने के डिप्लॉयमेंट में, एक खराब Captive Portal IT हेल्पडेस्क एस्केलेशन का एक प्रमुख कारण बनता है। जब मेहमानों को "व्हाइट स्क्रीन" या काम न करने वाले लॉगिन बटन का सामना करना पड़ता है, तो वे ऑन-साइट स्टाफ पर दबाव डालते हैं या सपोर्ट टिकट सबमिट करते हैं।

$$\text{Annual Support Savings} = (\text{Total Annual Guest Visits} \times \text{Portal Failure Rate} \times \text{Helpdesk Contact Rate}) \times \text{Cost Per Support Ticket}$$

  • परिदृश्य: 1,000,000 वार्षिक आगंतुकों वाला एक कन्वेंशन सेंटर। एक खराब कोड वाले पोर्टल की पुराने iOS उपकरणों पर 5% विफलता दर है, जिससे 10% हेल्पडेस्क संपर्क दर होती है। प्रति सपोर्ट टिकट $15 के उद्योग-मानक पर, परिचालन लागत है: $$(1,000,000 \times 0.05 \times 0.10) \times $15 = $75,000 \text{ टाले जा सकने वाले सहायता ओवरहेड में सालाना}$$
  • परिणाम: एक CNA-अनुकूलित, मोबाइल-फर्स्ट टेम्पलेट पर स्विच करने से पोर्टल की विफलता दर <0.1% हो जाती है, जिससे यह परिचालन बोझ लगभग समाप्त हो जाता है।

2. मार्केटिंग डेटा कैप्चर और ऑप्ट-इन अनुकूलन

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

  • केस स्टडी (रिटेल): एक राष्ट्रीय रिटेल चेन ने Purple के प्लेटफॉर्म का उपयोग करके मोबाइल-फर्स्ट अनुकूलित Captive Portal लागू किया। एक बहु-चरणीय लॉगिन फॉर्म को सिंगल-फील्ड ईमेल इनपुट (फ़ॉन्ट-आकार: 16px) और अनुकूलित 48px टैप-टार्गेट बटन से बदलकर, उन्होंने पहली तिमाही में पूर्ण पंजीकरण में 42% की वृद्धि और मार्केटिंग न्यूज़लेटर ऑप्ट-इन में 28% की वृद्धि देखी [6]।

3. कानूनी और नियामक जोखिम शमन

GDPR और CCPA के तहत, गैर-अनुपालन वाले डेटा संग्रह पर गंभीर वित्तीय दंड (GDPR के तहत वैश्विक वार्षिक कारोबार का 4% तक) लगता है। पहले से टिक किए गए चेकबॉक्स पर निर्भर रहने या अपने स्प्लैश पेज पर स्पष्ट, आसानी से सुलभ गोपनीयता नीति प्रदान करने में विफल रहने से उद्यम को भारी कानूनी दायित्व का सामना करना पड़ता है।

  • शमन ROI: एक स्पष्ट, अन-टिक किए गए सहमति चेकबॉक्स को लागू करना और एक अनुकूलित स्क्रॉलबॉक्स के भीतर शर्तों को होस्ट करना 100% नियामक अनुपालन सुनिश्चित करता है, जिससे लाखों डॉलर के नियामक जुर्मानों का जोखिम कम होता है और ब्रांड की प्रतिष्ठा सुरक्षित रहती है।

मुख्य निष्कर्षों का सारांश

  • CNA सैंडबॉक्स प्रतिबंधात्मक है: Apple का iOS वेबशीट और macOS CNA अत्यधिक सैंडबॉक्स वाले वातावरण हैं जो बाहरी संपत्तियों, कुकीज़ और वेब फोंट को ब्लॉक करते हैं। सभी स्टाइलिंग और संपत्तियां स्व-निहित (इनलाइन CSS, Base64 छवियां, सिस्टम फोंट) होनी चाहिए [1]।
  • AJAX iOS एक्ज़िट हैंडशेक को बाधित करता है: iOS डिवाइस को "कैप्टिव" से "कनेक्टेड" में सफलतापूर्वक स्थानांतरित करने के लिए (ऊपरी-दाएं बटन को "Cancel" से "Done" में बदलना), आपको पूर्ण-पृष्ठ HTTP रीडायरेक्ट को ट्रिगर करना होगा। एसिंक्रोनस DOM अपडेट डिवाइस को कैप्टिव लूप में छोड़ देंगे।
  • मोबाइल-फर्स्ट अनिवार्य है: 90% से अधिक लॉगिन मोबाइल पर होते हैं। एकल-कॉलम लेआउट (अधिकतम-चौड़ाई: 480px) डिज़ाइन करें, टच-फ्रेंडली टैप टारगेट (न्यूनतम 44px x 44px) का उपयोग करें, और स्वचालित iOS ब्राउज़र ज़ूमिंग को रोकने के लिए सभी टेक्स्ट इनपुट पर न्यूनतम 16px फ़ॉन्ट आकार लागू करें।
  • walled gardens DNS को नियंत्रित करते हैं: लॉगिन के दौरान संदर्भित किसी भी बाहरी डोमेन (जैसे, सोशल लॉगिन API) को वायरलेस कंट्रोलर के walled garden में स्पष्ट रूप से श्वेतसूचीबद्ध किया जाना चाहिए, अन्यथा पेज लोड होने में विफल हो जाएगा।
  • Purple बैकएंड की जटिलता को समाप्त करता है: Purple के पोर्टल बिल्डर का उपयोग करने से डेवलपर्स को एक कस्टम संपादक के माध्यम से पूर्ण HTML/CSS नियंत्रण मिलता है, जबकि RADIUS, बहु-विक्रेता AP एकीकरण, और GDPR-अनुपालन डेटाबेस प्रबंधन के भारी सुरक्षा, स्केलिंग और अनुपालन बोझ को कम किया जा सकता है [3]।

संदर्भ

-

तकनीकी जानकारी सुनें

कस्टम Captive Portals के लिए तकनीकी बाधाओं और कार्यान्वयन रणनीतियों पर चर्चा करते हुए एक वरिष्ठ समाधान आर्किटेक्ट को सुनें:

मुख्य परिभाषाएं

Captive Portal

एक वेब पेज जो WiFi नेटवर्क के नए जुड़े उपयोगकर्ताओं को नेटवर्क संसाधनों तक व्यापक पहुंच दिए जाने से पहले प्रदर्शित किया जाता है, आमतौर पर प्रमाणीकरण, भुगतान या सेवा की शर्तों को प्रदर्शित करने के लिए उपयोग किया जाता है।

IT टीमें अतिथि पहुंच को नियंत्रित करने, उपयोगकर्ता डेटा कैप्चर करने और कानूनी अनुपालन लागू करने के लिए गेटवे स्तर पर Captive Portal तैनात करती हैं।

Captive Network Assistant (CNA)

ऑपरेटिंग सिस्टम (जैसे Apple iOS और macOS) द्वारा एक कैप्टिव नेटवर्क रीडायरेक्ट का पता लगाने पर स्वचालित रूप से उत्पन्न होने वाला एक अत्यधिक प्रतिबंधित, सैंडबॉक्स किया गया मिनी-ब्राउज़र, जिसे केवल पोर्टल प्रमाणीकरण को आसान बनाने के लिए डिज़ाइन किया गया है।

CNA वेबव्यू बाहरी CDN, लगातार बने रहने वाले कुकीज़ और स्थानीय स्टोरेज को ब्लॉक करने सहित कड़े प्रतिबंध लागू करते हैं, जो अक्सर मानक वेब डिज़ाइनों को बाधित करते हैं।

Walled Garden

IP पतों, सबनेट या डोमेन नामों की एक प्रतिबंधित सूची जिसे एक अप्रमाणित अतिथि उपयोगकर्ता को Captive Portal लॉगिन प्रक्रिया पूरी करने से पहले गेटवे के माध्यम से एक्सेस करने की अनुमति होती है।

लॉगिन प्रवाह को रुकने से बचाने के लिए डेवलपर्स को यह सुनिश्चित करना होगा कि कोई भी बाहरी संसाधन (जैसे सोशल लॉगिन API या भुगतान गेटवे) Walled Garden में श्वेतसूची (व्हाइटलिस्ट) में शामिल हो।

Base64 एन्कोडिंग

एक बाइनरी-टू-टेक्स्ट एन्कोडिंग योजना जो बाइनरी डेटा (जैसे छवियों) को ASCII स्ट्रिंग के रूप में प्रस्तुत करती है, जिससे संपत्तियों को सीधे HTML या CSS दस्तावेजों के भीतर एम्बेड किया जा सकता है।

लोगो और आइकन के लिए Base64 एन्कोडिंग का उपयोग करने से बाहरी HTTP अनुरोध समाप्त हो जाते हैं, जिससे यह सुनिश्चित होता है कि एसेट ऑफलाइन CNA वातावरण में पूरी तरह से रेंडर हों।

RADIUS (रिमोट ऑथेंटिकेशन डायल-इन यूजर सर्विस)

एक नेटवर्किंग प्रोटोकॉल जो नेटवर्क सेवा से जुड़ने और उसका उपयोग करने वाले उपयोगकर्ताओं के लिए केंद्रीकृत प्रमाणीकरण, प्राधिकरण और लेखांकन (AAA) प्रबंधन प्रदान करता है।

प्रमाणीकरण मानदंड पूरे होने पर नेटवर्क गेटवे पर अतिथि के MAC पते को अधिकृत करने के लिए Captive Portal सर्वर एक RADIUS सर्वर के साथ संचार करता है।

सिस्टम फॉन्ट स्टैक

एक CSS font-family डिक्लेरेशन जो बाहरी वेब फॉन्ट की तुलना में पहले से इंस्टॉल ऑपरेटिंग सिस्टम फॉन्ट (जैसे iOS पर San Francisco, Windows पर Segoe UI और Android पर Roboto) को प्राथमिकता देता है।

सिस्टम फॉन्ट स्टैक को लागू करने से Google Fonts जैसी सेवाओं के लिए ब्लॉक किए गए बाहरी HTTP अनुरोधों को ट्रिगर किए बिना तत्काल टाइपोग्राफी रेंडरिंग सुनिश्चित होती है।

Canary URL

ऑपरेटिंग सिस्टम विक्रेताओं (जैसे, captive.apple.com) द्वारा बनाए रखा जाने वाला एक समर्पित, अनएन्क्रिप्टेड HTTP URL, जिससे यह परीक्षण किया जा सके कि किसी डिवाइस में अप्रतिबंधित इंटरनेट कनेक्टिविटी है या नहीं।

OS बैकग्राउंड नेटवर्क मैनेजर एक Captive Portal की उपस्थिति का पता लगाने और CNA वेबव्यू पॉपअप को ट्रिगर करने के लिए इस URL की जांच करता है।

Passpoint (Hotspot 2.0)

Wi-Fi Alliance द्वारा विकसित एक उद्योग मानक जो मोबाइल डिवाइसों को मैन्युअल Captive Portal लॉगिन को दरकिनार करते हुए, WiFi हॉटस्पॉट को स्वचालित रूप से खोजने और सुरक्षित रूप से प्रमाणित करने में सक्षम बनाता है।

एंटरप्राइजेस मेहमानों को असुविधाजनक स्प्लैश पेजों से निर्बाध, सेलुलर जैसे सुरक्षित रोमिंग अनुभवों पर स्थानांतरित करने के लिए Purple जैसे प्लेटफॉर्म के साथ Passpoint का उपयोग करते हैं।

हल किए गए उदाहरण

एक लग्जरी 250-कमरों वाली होटल श्रृंखला [Hospitality](/industries/hospitality) एक कस्टम अतिथि WiFi लॉगिन पेज लागू करना चाहती है जो उनके प्रीमियम ब्रांड दिशानिर्देशों से पूरी तरह मेल खाता हो। उनकी रचनात्मक एजेंसी ने कस्टम ब्रांड टाइपोग्राफी (Adobe Fonts पर होस्ट की गई), कई उच्च-रिज़ॉल्यूशन वाली बैकग्राउंड इमेज (एक सार्वजनिक AWS S3 बकेट पर होस्ट की गई), और एक बहु-चरण एनिमेटेड JavaScript विज़ार्ड का उपयोग करके एक स्प्लैश पेज डिज़ाइन किया। जब तैनात किया गया, तो iOS अतिथि SSID से कनेक्ट होते हैं, लेकिन पोर्टल एक खाली सफेद स्क्रीन के रूप में पॉप अप होता है, और उपयोगकर्ता प्रमाणित होने में असमर्थ होते हैं।

खाली स्क्रीन और टूटी हुई ब्रांडिंग को हल करने के लिए, हमें Apple CNA सैंडबॉक्स बाधाओं का अनुपालन करने के लिए पोर्टल के फ्रंटएंड आर्किटेक्चर को पुनर्गठित करना होगा:

  1. टाइपोग्राफी सुधार: चूंकि Adobe Fonts के लिए एक बाहरी HTTP अनुरोध की आवश्यकता होती है जिसे CNA द्वारा अवरुद्ध कर दिया जाता है, हम कस्टम फ़ॉन्ट कॉल को एक मूल, प्रीमियम सिस्टम फ़ॉन्ट स्टैक (font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;) से बदल देते हैं। यह बाहरी नेटवर्क कॉल के बिना तत्काल रेंडरिंग सुनिश्चित करता है।
  2. परिसंपत्ति अनुकूलन: AWS S3 पर बैकग्राउंड इमेज अवरुद्ध हैं क्योंकि S3 गेटवे के वॉल्ड गार्डन में नहीं है। हम प्राथमिक ब्रांड लोगो को संपीड़ित करते हैं, इसे एक हल्के SVG में परिवर्तित करते हैं, और इसे सीधे HTML में Base64 डेटा URI के रूप में एनकोड करते हैं। बैकग्राउंड के लिए, हम होटल के ब्रांड रंगों का उपयोग करके भारी छवियों को एक साफ, उत्तरदायी CSS ग्रेडिएंट से बदल देते हैं, जिससे पेज का वजन काफी कम हो जाता है।
  3. JavaScript सरलीकरण: बहु-चरण एनिमेटेड विज़ार्ड बाहरी jQuery और GSAP लाइब्रेरी पर निर्भर करता है। हम इन बाहरी निर्भरताओं को हटा देते हैं और फॉर्म को सिंगल-पेज, सिंगल-कॉलम HTML संरचना में रिफैक्टर करते हैं। फॉर्म सत्यापन को हल्के, वेनिला JavaScript में फिर से लिखा गया है।
  4. प्रमाणीकरण हैंडशेक: फॉर्म सबमिशन को AJAX-आधारित सबमिशन से एक मूल HTML <form action="/submit" method="POST"> में संशोधित किया जाता है ताकि पूर्ण-पेज रीडायरेक्ट को ट्रिगर किया जा सके, जिससे iOS वेबशीट को अपनी कैनरी जांच निष्पादित करने और 'Done' बटन प्रदर्शित करने की अनुमति मिलती है।
परीक्षक की टिप्पणी: यह परिदृश्य उच्च-स्तरीय रचनात्मक डिज़ाइन और कैप्टिव वेबव्यू की कठोर सुरक्षा बाधाओं के बीच क्लासिक संघर्ष को दर्शाता है। रचनात्मक एजेंसियां अक्सर कैप्टिव पोर्टल को एक मानक डेस्कटॉप वेबसाइट की तरह मानती हैं। हालांकि, क्योंकि डिवाइस पूर्व-प्रमाणित स्थिति में होता है, नेटवर्क सभी बाहरी ट्रैफ़िक को ब्लॉक कर देता है। CSS को इनलाइन करके, सिस्टम-स्टैकिंग फ़ॉन्ट्स, Base64-एन्कोडिंग परिसंपत्तियों और मूल फॉर्म सबमिशन का उपयोग करके, हम प्रीमियम ब्रांड सौंदर्य को संरक्षित करते हुए iOS और Android उपकरणों पर 100% परिचालन विश्वसनीयता प्राप्त करते हैं।

450 स्टोर वाली एक राष्ट्रीय रिटेल श्रृंखला [Retail](/industries/retail) अपने CRM को बढ़ावा देने के लिए WiFi स्प्लैश पेजों के माध्यम से अतिथि ईमेल कैप्चर करना चाहती है। उन्हें विपणन समाचार पत्रों के लिए ऑप्ट-इन करने के लिए मेहमानों की आवश्यकता होती है। प्रारंभिक डिज़ाइन में पहले से चेक किया गया 'मैं विपणन ईमेल प्राप्त करने के लिए सहमत हूँ' चेकबॉक्स है। इसके अलावा, पोर्टल उनके मुख्यालय में एक एकल स्थानीय सर्वर पर होस्ट किया गया है। पीक ऑवर्स (शनिवार दोपहर) के दौरान, देश भर के मेहमानों को गंभीर देरी का अनुभव होता है, और कई लोग लॉगिन पेज लोड करने में असमर्थ होते हैं, जिससे डेटा कैप्चर दरों में भारी गिरावट आती है।

हमें अनुपालन उल्लंघन और बुनियादी ढांचे (इन्फ्रास्ट्रक्चर) की बाधा दोनों का समाधान करना होगा:

  1. अनुपालन समाधान: GDPR और CCPA के तहत, पहले से टिक किए गए सहमति बॉक्स अवैध हैं। हम HTML को संशोधित करते हैं ताकि मार्केटिंग सहमति चेकबॉक्स डिफ़ॉल्ट रूप से अनचेक रहे (<input type="checkbox" id="marketing_consent">)। हम सेवा की शर्तों के लिए एक अलग, अनिवार्य चेकबॉक्स भी जोड़ते हैं ताकि कानूनी सहमति को मार्केटिंग ऑप्ट-इन से अलग किया जा सके।
  2. इन्फ्रास्ट्रक्चर स्केलिंग: एक ही केंद्रीकृत सर्वर पर राष्ट्रीय Captive Portal की मेजबानी करने से विफलता का एक ही बिंदु (सिंगल पॉइंट ऑफ़ फेलियर) और एक बड़ी लेटेंसी बाधा उत्पन्न होती है। हम पोर्टल फ्रंटएंड को एज-कैशिंग वाले अत्यधिक उपलब्ध, वैश्विक स्तर पर वितरित कंटेंट डिलीवरी नेटवर्क (CDN) में स्थानांतरित करते हैं।
  3. RADIUS एकीकरण: हम स्थानीय स्टोर एक्सेस पॉइंट्स को सक्रिय-सक्रिय रिडंडेंसी वाले क्लाउड-नेnative RADIUS क्लस्टर की ओर इंगित करने के लिए कॉन्फ़िगर करते हैं, जिससे यह सुनिश्चित होता है कि शनिवार के व्यस्त ट्रैफ़िक के दौरान भी प्रमाणीकरण अनुरोधों को एज पर स्थानीय रूप से 50ms से कम की लेटेंसी के साथ संसाधित किया जाए।
  4. Purple माइग्रेशन: इस पूरे इंजीनियरिंग ओवरहेड को खत्म करने के लिए, रिटेलर Purple पर माइग्रेट करता है। Purple का अंतर्निहित GDPR सहमति टूल स्वचालित रूप से अनुपालन वाले ऑप्ट-इन का प्रबंधन करता है, और उनका विश्व स्तर पर वितरित क्लाउड इन्फ्रास्ट्रक्चर 99.99% अपटाइम के साथ लाखों दैनिक प्रमाणीकरणों को संभालता है, जिससे स्केलिंग की बाधा पूरी तरह से हल हो जाती है।
परीक्षक की टिप्पणी: पहले से टिक किए गए सहमति चेकबॉक्स एक गंभीर अनुपालन जोखिम का प्रतिनिधित्व करते हैं जिससे भारी नियामक जुर्माना लग सकता है। सेवा की शर्तों से मार्केटिंग सहमति को अलग करना एक तकनीकी और कानूनी सर्वोत्तम अभ्यास है। इन्फ्रास्ट्रक्चर के मोर्चे पर, Captive Portal की केंद्रीकृत मेजबानी एक एंटी-पैटर्न है। देशव्यापी रिटेल नेटवर्क के लिए क्लाउड-नेनेटिव RADIUS बैकएंड के साथ जुड़े एक विकेंद्रीकृत, एज-कैश्ड फ्रंटएंड की आवश्यकता होती है। Purple जैसे प्रबंधित प्लेटफॉर्म पर माइग्रेट करने से यह आर्किटेक्चरल जटिलता समाप्त हो जाती है, जिससे रिटेलर डेटाबेस स्केलिंग के बजाय मार्केटिंग अभियानों पर ध्यान केंद्रित कर पाता है।

अभ्यास प्रश्न

Q1. एक प्रमुख अंतर्राष्ट्रीय हवाई अड्डे [Transport](/industries/transport) की एक IT टीम एक कस्टम-कोडेड Captive Portal तैनात करती है। वे देखते हैं कि जबकि Android उपयोगकर्ता निर्बाध रूप से कनेक्ट होते हैं, iOS उपयोगकर्ताओं के एक बड़े हिस्से को एक समस्या का सामना करना पड़ता है जहां वे सफलतापूर्वक प्रमाणित तो हो जाते हैं लेकिन वेब ब्राउज़ नहीं कर पाते हैं। करीब से देखने पर, iOS डिवाइस दिखाते हैं कि वे SSID से जुड़े हैं, लेकिन कैप्टिव पॉपअप पर ऊपर-दाएं कोने का बटन अभी भी 'Done' के बजाय 'Cancel' दिखाता है। इस समस्या का मूल कारण क्या है, और डेवलपर को इसे कैसे ठीक करना चाहिए?

संकेत: विश्लेषण करें कि Apple CNA हेल्पर कैसे पता लगाता है कि एक नेटवर्क कैप्टिव से प्रमाणित में बदल गया है, और इस जांच को ट्रिगर करने के लिए किस ब्राउज़र एक्शन की आवश्यकता होती है।

मॉडल उत्तर देखें

इसका मूल कारण यह है कि पोर्टल का सक्सेस पेज फुल-पेज HTTP नेविगेशन करने के बजाय JavaScript (AJAX/SPA राउटिंग) के माध्यम से UI को डायनेमिक रूप से अपडेट कर रहा है। Apple iOS Captive Network Assistant (CNA) मिनी-ब्राउज़र अपने बैकग्राउंड कनेक्टिविटी चेक (जो captive.apple.com पर किया जाने वाला कैनेरी अनुरोध है) को केवल तभी फिर से चलाता है जब फुल-पेज URL रीडायरेक्ट या नेविगेशन होता है। यदि डेवलपर AJAX के माध्यम से लॉगिन फ़ॉर्म सबमिट करता है और DOM में केवल एक 'सफलता' संदेश प्रदर्शित करता है, तो CNA को पता नहीं चल पाता है कि नेटवर्क अनलॉक हो गया है। परिणामस्वरूप, ऊपर-दाएं कोने का बटन 'Cancel' ही बना रहता है। यदि उपयोगकर्ता बाहर निकलने के लिए 'Cancel' पर क्लिक करता है, तो OS मान लेता है कि लॉगिन विफल हो गया और WiFi नेटवर्क से डिस्कनेक्ट हो जाता है।

समाधान: डेवलपर को फुल-पेज रीडायरेक्ट को बाध्य करने के लिए ऑथेंटिकेशन सक्सेस हैंडलर को संशोधित करना होगा। इसे एक मानक HTML <form action="/submit" method="POST"> के माध्यम से लॉगिन फ़ॉर्म को मूल रूप से सबमिट करके या API द्वारा सफल ऑथेंटिकेशन प्रतिक्रिया वापस करने पर JavaScript में window.location.href = '/success_landing_page' को निष्पादित करके प्राप्त किया जा सकता है। यह आवश्यक फुल-पेज लोड को ट्रिगर करता है, जिससे CNA हेल्पर नेटवर्क स्थिति का पुनर्मूल्यांकन करने, यह सत्यापित करने कि कैनेरी URL अब पहुंच योग्य है, और ऊपर-दाएं बटन को 'Done' में बदलने के लिए बाध्य होता है।

Q2. एक स्टेडियम संचालन टीम [Events] एक अतिथि WiFi नेटवर्क लॉन्च करना चाहती है जो मार्केटिंग ऑप्ट-इन एकत्र करता है। अनुपालन अधिकारी का आग्रह है कि पोर्टल 100% GDPR-अनुपालक होना चाहिए। विकास टीम एक मॉकअप प्रस्तुत करती है जहां लॉगिन फ़ॉर्म में एक पहले से चेक किया हुआ बॉक्स है जिसमें लिखा है 'मैं सेवा की शर्तों से सहमत हूं और मार्केटिंग न्यूज़लेटर प्राप्त करने की सहमति देता हूं'। यह डिज़ाइन गैर-अनुपालक क्यों है, और उच्च रूपांतरण दर बनाए रखते हुए GDPR को संतुष्ट करने के लिए HTML/CSS और फ़ॉर्म संरचना को कैसे रिफैक्टर किया जाना चाहिए?

संकेत: स्पष्ट सहमति के संबंध में GDPR की सख्त आवश्यकताओं, सेवा की शर्तों से मार्केटिंग ऑप्ट-इन को अलग करने और मोबाइल स्क्रीन पर कानूनी टेक्स्ट की भौतिक दृश्यता पर विचार करें।

मॉडल उत्तर देखें

प्रस्तावित डिज़ाइन दो प्रमुख मोर्चों पर GDPR का उल्लंघन करता है: पहला, पहले से टिक किए गए चेकबॉक्स वैध सहमति नहीं माने जाते, जो कि स्वतंत्र रूप से दी गई, विशिष्ट, सूचित और स्पष्ट होनी चाहिए। दूसरा, सेवा की शर्तों (Terms of Service) की सहमति के साथ मार्केटिंग सहमति को बंडल करना गैर-अनुपालनकारी है; किसी उपयोगकर्ता को WiFi सेवा का उपयोग करने की शर्त के रूप में मार्केटिंग ईमेल स्वीकार करने के लिए बाध्य नहीं किया जा सकता है।

रिफैक्टरिंग रणनीति:

  1. सहमति को अलग करें (Decouple Consent): चेकबॉक्स को दो अलग-अलग चेकबॉक्स में विभाजित करें। चेकबॉक्स A अनिवार्य है और इसमें सेवा की शर्तें और गोपनीयता नीति शामिल हैं। चेकबॉक्स B वैकल्पिक है और मार्केटिंग न्यूज़लेटर ऑप्ट-इन को कवर करता है।
  2. अनचेक पर सेट करें: सुनिश्चित करें कि HTML में दोनों चेकबॉक्स डिफ़ॉल्ट रूप से अनचेक हों (checked विशेषता हटा दी गई हो)।
  3. CSS विज़िबिलिटी: चूंकि 90% से अधिक उपयोगकर्ता मोबाइल पर हैं, इसलिए चेकबॉक्स को सीधे 'कनेक्ट' बटन के ऊपर रखें ताकि वे बिना स्क्रॉल किए 'अबाव द फोल्ड' दिखाई दें। सिस्टम फ़ॉन्ट स्टैक का उपयोग करें और पठनीयता के लिए लेबल फ़ॉन्ट आकार 14px और लाइन-हाइट 1.4 पर सेट करें।
  4. शर्तें स्क्रॉलबॉक्स: कानूनी टेक्स्ट द्वारा फ़ॉर्म एलिमेंट्स को स्क्रीन से बाहर धकेलने से रोकने के लिए, विस्तृत सेवा की शर्तों को एक निश्चित ऊंचाई (max-height: 100px; overflow-y: auto; background-color: #F5F1ED; border: 1px solid #D1D5DB; border-radius: 6px;) वाले स्क्रॉल करने योग्य कंटेनर में रखें जिसे एक टेक्स्ट लिंक के माध्यम से खोला या बंद किया जा सकता है। यह पूर्ण कानूनी अनुपालन सुनिश्चित करते हुए एक साफ, उच्च-रूपांतरण (high-converting) लेआउट बनाए रखता है।

Q3. एक रिटेल चेन [Retail](/industries/retail) 100 स्टोरों में एक कस्टम-कोडेड स्प्लैश पेज तैनात कर रही है। डिज़ाइनर ने Google Fonts (Montserrat) का उपयोग किया और HTML head में CDN-होस्ट किए गए Bootstrap स्टाइलशीट से लिंक किया। कॉर्पोरेट नेटवर्क पर परीक्षण के दौरान, पेज बहुत सुंदर दिखता है। हालांकि, जब इसे Captive Portal कॉन्फ़िगरेशन वाले एक परीक्षण स्टोर AP पर तैनात किया जाता है, तो पेज बिना स्टाइल वाले Times New Roman टेक्स्ट, टूटे हुए संरेखण (broken alignment) और गायब आइकन के साथ दिखाई देता है। ऐसा क्यों होता है, और संपत्तियों (assets) को कैसे रिफैक्टर किया जाना चाहिए?

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

मॉडल उत्तर देखें

यह विफलता इसलिए होती है क्योंकि स्प्लैश पेज लोड होने पर डिवाइस एक अप्रमाणित, कैप्टिव स्थिति में होता है। इस स्थिति में, वायरलेस गेटवे सभी आउटबाउंड इंटरनेट ट्रैफ़िक को ब्लॉक कर देता है, जिससे केवल गेटवे के वॉल्ड गार्डन में स्पष्ट रूप से श्वेतसूचीबद्ध (whitelisted) डोमेन पर ही अनुरोध की अनुमति मिलती है। चूंकि Bootstrap (cdn.jsdelivr.net) और Google Fonts (fonts.googleapis.com) के लिए CDN डोमेन श्वेतसूचीबद्ध नहीं हैं, इसलिए स्टाइलशीट और फ़ॉन्ट फ़ाइलों को लाने के ब्राउज़र के अनुरोध चुपचाप विफल हो जाते हैं। नतीजतन, ब्राउज़र अपने डिफ़ॉल्ट रेंडरिंग इंजन पर वापस आ जाता है, जिससे बिना स्टाइल वाला HTML (Times New Roman टेक्स्ट) और टूटा हुआ लेआउट दिखाई देता है।

रिफैक्टरिंग रणनीति:

  1. इनलाइन CSS: बाहरी Bootstrap स्टाइलशीट लिंक को हटा दें। आवश्यक CSS ग्रिड/फ्लेक्सबॉक्स नियमों को सीधे HTML <head> के भीतर एक <style> ब्लॉक में कॉपी करें। यह सुनिश्चित करता है कि सभी लेआउट निर्देश प्रारंभिक सिंगल-पेज पेलोड में ही डिलीवर हो जाएं।
  2. सिस्टम फ़ॉन्ट स्टैक लागू करें: Google Fonts @import या <link> कॉल को हटा दें। इसे CSS में एक मूल सिस्टम फ़ॉन्ट स्टैक से बदलें (font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;)। यह डिवाइस को ऑपरेटिंग सिस्टम पर पहले से इंस्टॉल किए गए उच्च-गुणवत्ता वाले फ़ॉन्ट का उपयोग करने के लिए मजबूर करता है, जिससे बाहरी नेटवर्क निर्भरता पूरी तरह से समाप्त हो जाती है।
  3. आइकन/लोगो को Base64 एनकोड करें: यदि लेआउट बाहरी छवियों या आइकन पुस्तकालयों (जैसे FontAwesome) पर निर्भर करता है, तो इन आइकन को SVG प्रारूप में परिवर्तित करें और उन्हें HTML के भीतर इनलाइन या CSS में Base64 डेटा URI के रूप में एम्बेड करें। यह गारंटी देता है कि पेज 100% आत्मनिर्भर है और शून्य इंटरनेट कनेक्टिविटी के साथ भी पूरी तरह से रेंडर होता है।

इस श्रृंखला में आगे पढ़ें

Ruijie के लिए कैप्टिव पोर्टल: इसे Purple गेस्ट WiFi के साथ सेटअप करें

कैसे Purple का क्लाउड गेस्ट WiFi वेब ऑथेंटिकेशन और RADIUS का उपयोग करके Ruijie RG Series एक्सेस पॉइंट्स के ऊपर काम करता है, जिसे कमांड लाइन से कॉन्फ़िगर किया गया है, और सटीक सेटअप चरण कहाँ खोजें।

गाइड पढ़ें →

B2B Captive Portals डिजाइन करना: पंजीकृत नाम और कंपनी डेटा एकत्र करना

यह गाइड IT प्रबंधकों और स्थल ऑपरेटरों को B2B captive portals डिजाइन करने के लिए एक विक्रेता-तटस्थ तकनीकी ढांचा प्रदान करती है। यह पंजीकृत नाम और कंपनी डेटा को कैप्चर करने के लिए पंजीकरण फ़ील्ड को संरचित करने का विवरण देती है, जिससे GDPR अनुपालन बनाए रखते हुए और खाता-स्तरीय बुद्धिमत्ता का निर्माण करते हुए उच्च पूर्णता दर सुनिश्चित होती है।

गाइड पढ़ें →

कैप्टिव पोर्टल आर्किटेक्चर: सुरक्षा, रीडायरेक्शन और सर्वोत्तम प्रथाएं

एंटरप्राइज कैप्टिव पोर्टल आर्किटेक्चर पर एक निश्चित तकनीकी संदर्भ। यह गाइड सुरक्षित, डेटा-समृद्ध गेस्ट WiFi नेटवर्क तैनात करने वाले IT लीडर्स के लिए नेटवर्क आइसोलेशन, DNS रीडायरेक्शन, RADIUS ऑथेंटिकेशन और सुरक्षा अनुपालन का विश्लेषण करती है।

गाइड पढ़ें →