2010-09-10 12 views

उत्तर

43

यह प्रयोग न करें। विवरण कहता है:

वर्तमान सत्र के साथ एक या अधिक वैश्विक चर पंजीकृत करें।

दो चीजें हैं जो मेरे मन के लिए आया था:

  1. वैश्विक चर का उपयोग करना, वैसे भी अच्छा नहीं है एक तरह से उन्हें बचने के लिए लगता है।
  2. आप अभी भी $_SESSION['var'] = "value" के साथ चर सेट कर सकते हैं।

manual से भी चेतावनी देखें:

आप अपनी स्क्रिप्ट register_globals की परवाह किए बिना काम करना चाहते हैं, तो आप के बजाय $_SESSION सरणी का उपयोग करने के रूप में $_SESSION प्रविष्टियों को स्वचालित रूप से पंजीकृत हैं की जरूरत है। यदि आपकी स्क्रिप्ट session_register() का उपयोग करती है, तो यह वातावरण में काम करेगा जहां PHP निर्देश register_globals अक्षम है।

यह बहुत महत्वपूर्ण है, क्योंकि register_globals निर्देश is set to False by default!

आगे:

यह एक global चर पंजीकृत करता है। यदि आप फ़ंक्शन के भीतर से एक सत्र चर पंजीकृत करना चाहते हैं, तो आपको global कीवर्ड या $GLOBALS[] सरणी का उपयोग करके इसे वैश्विक बनाना सुनिश्चित करना होगा, या नीचे दिए गए विशेष सत्र सरणी का उपयोग करना होगा।

और

आप $_SESSION (या $HTTP_SESSION_VARS) का उपयोग कर रहे हैं, तो उपयोग नहीं करते session_register(), session_is_registered(), और session_unregister()

23

उपयोग $_SESSION सीधे में session_register() पदावनत समस्या को ठीक करने के लिए। इस तरह:

$_SESSION['name'] = 'stack'; 

बजाय:

$name = 'stack'; 
session_register("name"); 

Read More Here

16

पीएचपी 5,3

session_register("name"); 

PHP 5 के बाद से पहले।3

$_SESSION['name'] = $name; 
-1

हम सिर्फ पदावनत समारोह के सामने @ उपयोग करना होगा। उपरोक्त पदों में उल्लिखित कुछ भी बदलने की जरूरत नहीं है। उदाहरण के लिए: if([email protected]_is_registered("username")){ }। बस @ डालें और समस्या हल हो गई है।

if (is_array($start_vars)) { 
    foreach ($start_vars as $var) { 
     session_register($var); 
    } 
} else if (!(empty($start_vars))) { 
    session_register($start_vars); 
} 

आदेश में:

+2

बस त्रुटियों को दबाकर नहीं है बहिष्कृत कार्यों से निपटने का एक सही तरीका है। यह कभी-कभी एक त्वरित गर्म-फिक्स होता है, लेकिन कभी भी दीर्घकालिक समाधान नहीं होता है (यहां तक ​​कि अल्पकालिक भी नहीं!)। यह पता लगाने का प्रयास करें कि इसे बहिष्कृत क्यों चिह्नित किया गया है और आप इसके खिलाफ क्या कर सकते हैं! – Haudegen

8

आप इस्तेमाल कर सकते हैं अगर आप एक fallback समारोह की जरूरत है इस

function session_register($name){ 
    global $$name; 
    $_SESSION[$name] = $$name; 
    $$name = &$_SESSION[$name]; 
} 
0

Felix Kling के जवाब की मदद के लिए मैं एक codebase कि निम्नलिखित कोड किया करते थे पढ़ाई कर रहा था session_register का उपयोग न करने के लिए उन्होंने निम्नलिखित समायोजन किए:

if (is_array($start_vars)) { 
    foreach ($start_vars as $var) { 
     $_SESSION[$var] = $GLOBALS[$var]; 
    } 
} else if (!(empty($start_vars))) { 
    $_SESSION[$start_vars] = $GLOBALS[$start_vars]; 
} 
संबंधित मुद्दे