मेरे पास apache2 के साथ एक विंडोज सर्वर 2008 है। सर्वर में 2 डिस्क हैं और मैं दोनों पर अपाचे इंस्टेंस चलाता हूं। पहला एक सेवा के रूप में चलता है दूसरा कमांडलाइन में। वे दोनों अपने स्वयं के htdocs फ़ोल्डर में एक समान वेबूट की एक सटीक प्रति का उपयोग करते हैं। इसके अलावा वे दोनों एक ही PHP इंस्टाल का उपयोग करते हैं जो पहली डिस्क (प्रोग्राम फाइल्स (x86)) पर स्थित है। मेरा एप्लिकेशन एसएसएल पर चलता है और PHP और MySQL का उपयोग करता है।
एक सेवा के रूप में चलने वाला वेबसर्वर मेरे एप्लिकेशन को ठीक चलाता है और मुझे लॉगिन करने देता है और मेरा सत्र डेटा हर समय तैयार रहता है। दूसरा सर्वर हालांकि मुझे अपनी लॉगिन स्क्रिप्ट चलाने देता है, स्क्रिप्ट चलाते समय सत्र डेटा होता है लेकिन उसी वेबूट के अंदर किसी अन्य पृष्ठ पर रीडायरेक्ट के बाद उस सत्र डेटा को खो देता है।
दूसरे वेबसर्वर पर समस्या यह प्रश्न अपवाद के साथ है कि मेरे पास प्रत्येक पृष्ठ पर session_start() है।
मेरी लॉगिन स्क्रिप्ट इस तरह काम करती है:
- उपयोगकर्ता एक पृष्ठ का अनुरोध करता है
- यदि उपयोगकर्ता प्रमाणित नहीं है, तो उसे वापस लॉगिन पृष्ठ पर फेंक दिया जाता है
- यदि उपयोगकर्ता प्रमाणित है, तो उसे अपने प्रोफ़ाइल डेटा के साथ $_SESSION["auth"] मिलता है
- फिर जब उपयोगकर्ता मुख्य पृष्ठ या अन्य पृष्ठों को ब्राउज़ कर रहा होता है, जिन्हें प्रमाणीकरण की आवश्यकता होती है, तो वे केवल यह जांचते हैं कि $_SESSION["auth"] सेट है या नहीं।
इसे कैसे हल करें इस पर कोई सुझाव?
संपादित करें: एक छोटा सा स्पष्टीकरण। मेरे पास प्रत्येक पृष्ठ पर एक सत्र आईडी है। जब मैं पुनर्निर्देशित हो जाता हूं तो वह आईडी नहीं बदलती है। मेरे पास उस पृष्ठ पर $_SESSION चर में कोई डेटा नहीं है जिस पर मैं रीडायरेक्ट करता हूं।
3 जवाब
PHP सत्र निर्देशिका की अनुमतियों को देखें जहां सत्र के लिए फ़ाइलें संग्रहीत की जा रही हैं। अगर php के पास फाइल लिखने, बनाने और बदलने का अधिकार नहीं है तो आप अपने $_SESSION var में कुछ भी स्टोर नहीं कर पाएंगे।
मुझे समाधान मिला। वेबसर्वर चलाने वाले उपयोगकर्ता के पास httpd.conf में सभी पथों की अनुमति थी लेकिन PHP.ini में सभी पथों तक पहुंचने की अनुमति नहीं थी। session.save_path उन पथों में से एक है और यदि सर्वर सत्र डेटा संग्रहीत नहीं कर सकता है तो सर्वर सत्र डेटा तक नहीं पहुंच सकता है।
Session.save_path को C:\Windows\Temp पर सेट किया गया था और शुरू में मुझे नहीं लगता था कि मुझे अपाचे dirs, php dirs और webroot के अलावा किसी भी चीज़ की अनुमति देनी होगी।
आपकी सभी मदद का धन्यवाद!
यदि उपयोगकर्ता आपकी साइट के रूट के उप-पथ पर जाता है और फिर ऊपर की ओर नेविगेट करता है तो सत्र टूट जाएगा। ऐसा इसलिए है क्योंकि कुकी केवल उस पथ के लिए सेट की जाएगी, आपके संपूर्ण डोमेन के लिए नहीं। अधिक जानकारी यहाँ: http://www.php.net/manual /en/function.session-start.php#91298
print_r($_SERVER)
और phpinfo()
से आउटपुट की तुलना करने की कोशिश कर सकते हैं और देख सकते हैं कि दोनों सर्वरों के बीच कोई स्पष्ट अंतर है या नहीं...
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
php
PHP एक व्यापक रूप से उपयोग किया जाता है, उच्च-स्तरीय, गतिशील, वस्तु-उन्मुख, और व्याख्या की गई स्क्रिप्टिंग भाषा मुख्य रूप से सर्वर-साइड वेब विकास के लिए डिज़ाइन की गई है। PHP भाषा के बारे में सवालों के लिए इस्तेमाल किया।
<pre><?php print_r($_SESSION); ?></pre>
, दूसरे शब्दों में; एक सत्र डंप?