2010-03-19 18 views
5

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

वैसे भी, मेरे $ _SESSION युद्ध किसी कारण से अपना मूल्य बरकरार नहीं रख रहे हैं जिसे मैं समझ नहीं सकता। साइट लोकहोस्ट पर पूरी तरह से काम करती है, लेकिन इसे सर्वर पर अपलोड करना इसे तोड़ने लग रहा था।

पहली चीज़ जो मैंने जांच की थी वह PHP.ini सर्वर सेटिंग्स थी। सबकुछ ठीक लगता है। वास्तव में, मेरा लॉगिन सिस्टम सत्र आधारित है और यह पूरी तरह से काम करता है। तो अब मुझे पता है कि $ _SESSIONS ठीक से काम कर रहे हैं और मेरे लॉगिन के लिए अपना मूल्य बरकरार रखते हैं, मुझे लगता है कि सर्वर सेटअप है और समस्या मेरी लिपि में है।

यहां कोड का एक अलग संस्करण है जो समस्या पैदा कर रहा है। जीईटी चर के माध्यम से सेट किए जाने के बाद $ प्रकार, $ ऑर्डर और $ शैली को बनाए रखा नहीं जा रहा है। उपयोगकर्ता एक लिंक पर क्लिक करता है, जो जीईटी के माध्यम से एक चर सेट करता है, और यह चर उनके शेष सत्र के लिए बनाए रखा जाता है।

क्या मेरे तर्क के साथ कोई समस्या है जिसे मैं नहीं देख रहा हूं?

<?php 
require_once('includes/top.php'); //first line includes a call to session_start(); 
require_once('includes/db.php'); 

$type = filter_input(INPUT_GET, 't', FILTER_VALIDATE_INT); 
$order = filter_input(INPUT_GET, 'o', FILTER_VALIDATE_INT); 
$style = filter_input(INPUT_GET, 's', FILTER_VALIDATE_INT); 

/* 
According to documentation, filter_input returns a NULL when variables 
are undefined. So, if t, o, or s are not set via URL, $type, $order and $style 
will be NULL. 
*/  

print_r($_SESSION); 
/* 
All other sessions, such as the login session, etc. are displayed here. After 
the sessions are set below, they are displayed up here to... simply with no value. 
This leads me to believe the problem is with the code below, perhaps? 
*/ 


// If $type is not null (meaning it WAS set via the get method above) 
// or it's false because the validation failed for some reason, 
// then set the session to the $type. I removed the false check for simplicity. 
// This code is being successfully executed, and the data is being stored... 
if(!is_null($type)) 
{ 
    $_SESSION['type'] = $type; 
} 
if(!is_null($order)) 
{ 
    $_SESSION['order'] = $order; 
} 
if(!is_null($style)) 
{ 
    $_SESSION['style'] = $style; 
} 


$smarty->display($template); 

?> 

यदि कोई मुझे सही दिशा में इंगित कर सकता है, तो मैं इसकी सराहना करता हूं। धन्यवाद।

उत्तर

7

अविश्वसनीय!

बाद डिबगिंग के तीन घंटे, मैं इस समस्या

HostGator समझ गए होंगे, मेरी न अब-प्रिय मेजबान, पर

मैं विश्वास नहीं कर सकता रजिस्टर_ग्लोबल्स साथ आरं उनके डिफ़ॉल्ट चलाता है इस।

तो $ प्रकार के मेरे चर $ _SESSION ['type'] के साथ ओवरराइट किए जा रहे थे और उनका इलाज समान ही किया जा रहा था। तो यह समस्या का कारण बनने वाला एक सर्वर मुद्दा था, न कि मेरे कोडिंग। यह जानना बहुत अच्छा है, लेकिन मैं अपने बालों को वापस खींचने के अपने 5 घंटे चाहता हूं।

मुझे आशा है कि यह किसी को सड़क के नीचे मदद करेगा जिसका उपयोग होस्टगेटर का उपयोग करना और नरक के रूप में उलझन में है।

+0

मैंने एक बार भी अनुभव किया है। यदि आप इस तरह के अजीब व्यवहार की अपेक्षा नहीं करते हैं तो यह बहुत ही भयानक है। – Gumbo

+0

@Foo धन्यवाद भाई! आपने मेरे 5 घंटे बचाए बहुत बहुत धन्यवाद। –

+0

मैंने अभी आपके प्रश्न और उत्तर दोनों को +1 करने के लिए साइन इन किया है। यह मुझे पागल बना रहा था। –

1

आपको session_start() फ़ंक्शन पर कॉल करने की आवश्यकता है। $_SESSION चर का उपयोग करने से पहले।

तो यह आप पर सभी सत्र चर बनी रहेगी ..

+0

सत्र_स्टार्ट() को पहले शीर्ष/शामिल फ़ाइल में शीर्ष पर रखा जाता है। अन्य सत्र आधारित चर काम कर रहे हैं, इसलिए सत्र बनाया जा रहा है और पूरी तरह से शुरू हो रहा है। – Foo

0

मुझे लगता है कि आप ने कहा आप() session_start को top.php आप में एक फोन किया है? और एक और बात मुझे नोटिस है कि आप PHP फ़िल्टर के माध्यम से इंटीजर फ़ील्ड को मान्य कर रहे हैं। सुनिश्चित करें कि वे पूर्णांक मान हैं या आप शून्य मानों के साथ समाप्त होने के लिए बाध्य हैं। यह देखने के लिए एक परीक्षण करें कि टाइप करने के पहले टाइप, ऑर्डर और स्टाइल मान सेट किए गए हैं या नहीं। ध्यान रखें कि, php फ़िल्टर का उपयोग करना किसी निश्चित प्रकार के लिए मान्य करना है और स्टोर नहीं करना है। मुझे नहीं लगता कि $ प्रकार आपके डेटा को स्टोर करेगा, यह एक बूलियन चेक होगा। सत्र VARIABLES में $ _GET [] चर निर्दिष्ट करने का प्रयास करें। उम्मीद है की यह मदद करेगा।

+0

सुझावों के लिए धन्यवाद। मैंने कोशिश की, सभी चर सेट किए जा रहे हैं। वास्तव में, $ _SESSION ['type'] या जो भी मेरे कोड का उपयोग कर सेट किया जा रहा है। जब आप साइट ब्राउज़ करना जारी रखते हैं तो यह केवल मूल्य को बरकरार नहीं रखता है। कोई अन्य जगह नहीं है जो इसे अनसेट या ओवरराइट कर रही है। – Foo

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