2013-04-30 6 views
89

मैं <input type="hidden"> टैग के मूल उद्देश्य के बारे में उत्सुक हूं।<इनपुट प्रकार = "छुपा"> का मूल उद्देश्य?

आजकल अक्सर जावास्क्रिप्ट के साथ सर्वर में भेजे जाने वाले चरों को संग्रहीत करने के लिए इसका उपयोग किया जाता है जो इस तरह की चीजें और उस तरह की चीजें हैं।

इसलिए जारी किया गया था <input type="hidden"> जावास्क्रिप्ट से पहले से ही अस्तित्व में , तो क्या अपने मूल उद्देश्य था? मैं केवल सर्वर से क्लाइंट को एक मूल्य भेजने की कल्पना कर सकता हूं जो एक प्रकार का राज्य बनाए रखने के लिए वापस भेजा गया है (अपरिवर्तित)। या क्या मुझे इसके इतिहास में कुछ गड़बड़ है और <input type="hidden"> हमेशा जावास्क्रिप्ट के साथ इस्तेमाल किया जाना चाहिए था?

यदि संभव हो, तो कृपया अपने उत्तरों में संदर्भ भी दें।

+3

एसओ के लिए विषय बंद रखना हालांकि राज्य को बनाए रखने के लिए मेरा चयन – Phil

+0

भी होगा, पूर्व-जनसंख्या वाले राज्य (उदाहरण के दौरान सरोगेट पीके के उदाहरण) की ट्रैकिंग की अनुमति देने के लिए, जिसे स्वचालित रूप से सबमिट किए गए फॉर्म में शामिल किया जाएगा POST/GET – StuartLC

+1

मौजूदा * इससे पहले * जावास्क्रिप्ट * समर्थन करता है * उन्हें और भी अधिक होने के कारण (यानी, यह किसी भी कारण से अलग नहीं होता है क्योंकि यह प्रश्न इंगित करता है) - "स्टोर चर" करने के लिए कोई जावास्क्रिप्ट नहीं था या "गैर" में AJAX या स्टब को कॉल नहीं किया गया था एक फॉर्म सबमिट करने से पहले छिपी हुई "इनपुट फ़ील्ड .. अन्य विकृत हैक्स के लिए कोई सीएसएस भी नहीं था जैसे कि सामान्य टेक्स्ट इनपुट छुपाया जाता है। – user2246674

उत्तर

95

मैं केवल ग्राहक जो (अपरिवर्तित) है वापस भेजा एक राज्य का एक प्रकार बनाए रखने के लिए करने के लिए सर्वर से कोई मान भेजने की कल्पना कर सकते हैं।

सटीक रूप से। असल में, आज भी इस उद्देश्य के लिए इसका उपयोग किया जा रहा है क्योंकि HTTP जैसा कि हम जानते हैं आज भी कम से कम मौलिक रूप से एक स्टेटलेस प्रोटोकॉल है।

type=hidden
ये फील्ड गाया नहीं किया जाना चाहिए और सर्वर के लिए एक साधन प्रदान:

यह उपयोग के मामले वास्तव में पहले HTML 3.2 में वर्णित किया गया था (मैं HTML 2.0 हैरान इस तरह के एक विवरण शामिल नहीं किया था हूँ) एक राज्य के साथ राज्य की जानकारी स्टोर करने के लिए। संबंधित गुणों द्वारा परिभाषित नाम/मूल्य जोड़ी का उपयोग करके फॉर्म को सबमिट किए जाने पर यह सर्वर पर वापस भेज दिया जाएगा। यह HTTP की स्टेटलेसनेस के लिए एक काम है। एक और तरीका HTTP "कुकीज़" का उपयोग करना है।

<input type=hidden name=customerid value="c2415-345-8563"> 

हालांकि यह है कि HTML 3.2 उल्लेख के लायक है एक W3C सिफारिश बन गया केवल जावास्क्रिप्ट के आरंभिक प्रदर्शन के बाद, यह मान लेना कि छिपा क्षेत्रों काफी हमेशा एक ही उद्देश्य की सेवा की है सुरक्षित है।

+0

एक चीज जो मुझे डेटा स्टोर करने के लिए 'छिपे हुए' इनपुट का उपयोग करने के बारे में पसंद नहीं है, वह यह है कि डेटा को उपयोगकर्ताओं द्वारा छेड़छाड़ की जा सकती है, संभवतः केवल वह व्यक्ति जो HTML को समझता है और देव उपकरण के माध्यम से इसे कैसे संशोधित करता है, लेकिन खराब प्रभाव हो सकता है डेटाबेस पर यदि उन मानों में संशोधन अन्य डेटा को दूषित करता है (उदाहरण के लिए, यदि आप प्राथमिक कुंजी संदर्भ संग्रहीत कर रहे हैं और यह उपयोगकर्ता द्वारा मैन्युअल रूप से बदला जाता है)। – Brett84c

+2

@ Brett84c: यही कारण है कि आपको हमेशा अपने इनपुट को सत्यापित करना चाहिए और कभी भी ग्राहक पर भरोसा नहीं करना चाहिए;) – BoltClock

+0

बिल्कुल, मैं नए डेवलपर्स के लिए संभावित संभावित खतरों से अवगत होने के लिए वहां फेंक रहा था। – Brett84c

7

संक्षेप में, मूल उद्देश्य एक ऐसा क्षेत्र बनाना था जो फॉर्म के सबमिट के साथ सबमिट किया जाएगा। कभी-कभी, छिपे हुए क्षेत्र में कुछ जानकारी स्टोर करने की आवश्यकता होती है (उदाहरण के लिए, उपयोगकर्ता की आईडी) और फॉर्म के सबमिट के साथ जमा करें।

एचटीएमएल सितंबर 22, 1995 विनिर्देश से

साथ `प्रकार = छिपे 'एक छिपा field.The उपयोगकर्ता इस क्षेत्र को साथ बातचीत नहीं करता का प्रतिनिधित्व करता है एक इनपुट तत्व; इसके बजाय, VALUE विशेषता फ़ील्ड का मान निर्दिष्ट करती है। NAME और VALUE विशेषताएँ आवश्यक हैं।

+1

क्या आप कृपया उस उत्तर पर विस्तृत जानकारी दे सकते हैं और/या फ़ॉर्म के सबमिट के बाद छिपे हुए फ़ील्ड सबमिट करने के इस व्यवहार के बारे में कुछ संदर्भ दे सकते हैं? – GitaarLAB

+0

@ गीतार्लब, मैंने एक उदाहरण दिया (उपयोगकर्ता आईडी) ... वैसे भी, वेब में बहुत से उदाहरण हैं। उदाहरण के लिए http://www.echoecho.com/htmlforms07.htm –

+1

मुझे खेद है, मेरे लिए लाइन: 'मूल उद्देश्य एक फ़ील्ड बनाना था जिसे सबमिट किया जाएगा * * फॉर्म के सबमिट के बाद * संदिग्ध है। इसका अर्थ इस प्रकार किया जा सकता है: 'फॉर्म के बाद अपना डेटा पोस्ट करने के बाद, * * छुपा फ़ील्ड जमा किया जाएगा (एक रहस्यमय जगह पर)। इसलिए, ऊपर मेरी टिप्पणी। – GitaarLAB

9

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

उदाहरण

<?php 
    if(isset($_POST['delete_action'])) { 
     mysqli_query($connection, "DELETE FROM table_name 
            WHERE record_id = ".$_POST['row_to_be_deleted']); 
            //Here is where hidden field value is used 
    } 

    while(condition) { 
?> 
    <span><?php echo 'Looped Record Name'; ?> 
    <form method="post"> 
     <input type="hidden" name="row_to_be_deleted" value="<?php echo $record_id; ?>" /> 
     <input type="submit" name="delete_action" /> 
    </form> 
<?php 
    } 
?> 
+2

अच्छा मूल उदाहरण। – BoltClock

+1

असली उदाहरण को छोड़कर, वास्तविक कोड को एसक्यूएल इनपुट को सुरक्षित रूप से संभालने के लिए तैयार कथन या किसी अन्य तरीके का उपयोग करना चाहिए। –

4

मूल रूप से छुपी फ़ील्ड अधिक उपयोगी हो सकता है और लाभ बहु कदम के साथ उपयोग करने के लिए के लिए किया जाएगा प्रपत्र। हम छिपे हुए फ़ील्ड का उपयोग छुपाकर अगले चरण में एक चरण की जानकारी पास करने के लिए कर सकते हैं और इसे अंतिम चरण तक अग्रेषित कर सकते हैं।

  1. सीएसआरएफ टोकन।

क्रॉस-साइट अनुरोध जालसाजी (http://en.wikipedia.org/wiki/Cro...) एक बहुत ही आम वेबसाइट भेद्यता है। सभी फॉर्म सबमिशन में एक गुप्त, उपयोगकर्ता-विशिष्ट टोकन की आवश्यकता सीएसआरएफ हमलों को रोक देगी क्योंकि हमले साइटें अनुमान लगा सकती हैं कि उचित टोकन क्या है और उपयोगकर्ता की ओर से वे किसी भी फॉर्म सबमिशन को हमेशा विफल कर देंगे।

  1. बहु-पृष्ठ रूपों में राज्य को सहेजें।

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

सामान्य नियम: किसी भी चीज़ को स्टोर करने के लिए फ़ील्ड का उपयोग करें जिसे उपयोगकर्ता को देखने की आवश्यकता नहीं है, लेकिन आप फॉर्म जमा करने पर सर्वर को भेजना चाहते हैं।

4

फॉर्म = 'छुपा' सहित फॉर्म तत्वों के मान सर्वर पर सबमिट किए जाने पर सर्वर पर सबमिट किए जाते हैं। इनपुट प्रकार = "छुपा" मान पृष्ठ में दिखाई नहीं दे रहे हैं। छिपे हुए क्षेत्रों में उपयोगकर्ता आईडी को बनाए रखना, उदाहरण के लिए, कई उपयोगों में से एक है।

SO अपवॉट क्लिक के लिए एक छिपे हुए फ़ील्ड का उपयोग करता है।

<input value="16293741" name="postId" type="hidden"> 

इस मान का उपयोग करके, सर्वर-साइड स्क्रिप्ट अपवोट स्टोर कर सकती है।

+0

हाहा, अच्छा पकड़ो! और जब मैं मान के अंत में "x" जोड़ता हूं तो त्रुटि तब होती है जब अपवॉटिंग: डी – Uooo

+0

@Uooo और आप इसे अनदेखा कर सकते हैं या सीधे मान बदल सकते हैं। आप मान को एक अलग उत्तर में बदल सकते हैं। फिर आप उपरोक्त बटन पर क्लिक कर सकते हैं और यह एक अलग उत्तर के लिए अपवोट के रूप में लॉग इन है। ;) –

संबंधित मुद्दे