<इनपुट प्रकार = "छिपा"> का मूल उद्देश्य? [बन्द है]


101

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

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

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

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


3
राज्य को बनाए रखने के लिए एसओ के लिए ऑफ टॉपिक भी मेरी पिक होगी
फिल अप

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

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

जवाबों:


108

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

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

इस उपयोग के मामले को वास्तव में HTML 3.2 में वर्णित किया गया था (मुझे आश्चर्य है कि HTML 2.0 ने ऐसा वर्णन शामिल नहीं किया है):

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

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

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


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

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

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

2
उन खतरों के बारे में कुछ भी 'छिपी' जानकारी के लिए विशिष्ट नहीं है - ग्राहक को भेजी जाने वाली किसी भी चीज़ को वापस आने से पहले हेरफेर किया जा सकता है। कुकीज़ या JS- आधारित विकल्प केवल एक ही हैं।
FLHerne

10

मैं यहां एक सरल सर्वर साइड रियल वर्ल्ड उदाहरण प्रदान करूंगा, यदि रिकॉर्ड्स लूप हो गए हैं और प्रत्येक रिकॉर्ड में एक डिलीट बटन के साथ एक फॉर्म है और आपको एक विशिष्ट रिकॉर्ड हटाने की आवश्यकता है, तो यहां hiddenएक्शन में फ़ील्ड आती है, अन्यथा आप जीत गए ' t इस मामले में हटाए जाने वाले रिकॉर्ड का संदर्भ प्राप्त करें, यह होगा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
    }
?>

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

8

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

HTML से 22 सितंबर, 1995 विनिर्देश

`TYPE = HIDDEN’ वाला एक INPUT तत्व एक छिपे हुए क्षेत्र का प्रतिनिधित्व करता है। उपयोगकर्ता इस क्षेत्र के साथ सहभागिता नहीं करता है; इसके बजाय, VALUE विशेषता फ़ील्ड का मान निर्दिष्ट करती है। NAME और VALUE विशेषताओं की आवश्यकता है।


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

@ गीतालारब, मैंने एक उदाहरण (यूजर आईडी) दिया ... वैसे भी, वेब में बहुत सारे उदाहरण हैं। उदाहरण के लिए echoecho.com/htmlforms07.htm
चक नॉरिस

1
मुझे क्षमा करें, मेरे लिए लाइन: original purpose was to make a field which will be submitted *after* form's submitअस्पष्ट है। इसकी व्याख्या इस प्रकार की जा सकती है: 'जब फॉर्म अपने डेटा को पोस्ट करने के बाद किया जाता है, तब छिपे हुए फ़ील्ड को (एक रहस्यमय स्थान पर) जमा किया जाएगा'। इसलिए, मेरी टिप्पणी ऊपर।
गीतालैब

1
मुझे यह मिल गया :) आपकी टिप्पणी के लिए धन्यवाद, मैंने अपना उत्तर संपादित कर दिया है। यह सिर्फ गलत वर्तनी थी (अभी तक अंग्रेजी में गुरु स्तर तक नहीं पहुंची है: डी)।
चक नॉरिस

6

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

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

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

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


हाहा, अच्छी पकड़! और जब मैं मूल्य के अंत में एक "x" संलग्न करता हूं तो एक त्रुटि तब होती है जब
upvoting

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

5

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

  1. CSRF टोकन।

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

  1. बहु-पृष्ठ रूपों में स्थिति सहेजें।

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.