मेरे पास apache2 के साथ एक विंडोज सर्वर 2008 है। सर्वर में 2 डिस्क हैं और मैं दोनों पर अपाचे इंस्टेंस चलाता हूं। पहला एक सेवा के रूप में चलता है दूसरा कमांडलाइन में। वे दोनों अपने स्वयं के htdocs फ़ोल्डर में एक समान वेबूट की एक सटीक प्रति का उपयोग करते हैं। इसके अलावा वे दोनों एक ही PHP इंस्टाल का उपयोग करते हैं जो पहली डिस्क (प्रोग्राम फाइल्स (x86)) पर स्थित है। मेरा एप्लिकेशन एसएसएल पर चलता है और PHP और MySQL का उपयोग करता है।

एक सेवा के रूप में चलने वाला वेबसर्वर मेरे एप्लिकेशन को ठीक चलाता है और मुझे लॉगिन करने देता है और मेरा सत्र डेटा हर समय तैयार रहता है। दूसरा सर्वर हालांकि मुझे अपनी लॉगिन स्क्रिप्ट चलाने देता है, स्क्रिप्ट चलाते समय सत्र डेटा होता है लेकिन उसी वेबूट के अंदर किसी अन्य पृष्ठ पर रीडायरेक्ट के बाद उस सत्र डेटा को खो देता है।

दूसरे वेबसर्वर पर समस्या यह प्रश्न अपवाद के साथ है कि मेरे पास प्रत्येक पृष्ठ पर session_start() है।

मेरी लॉगिन स्क्रिप्ट इस तरह काम करती है:

  • उपयोगकर्ता एक पृष्ठ का अनुरोध करता है
  • यदि उपयोगकर्ता प्रमाणित नहीं है, तो उसे वापस लॉगिन पृष्ठ पर फेंक दिया जाता है
  • यदि उपयोगकर्ता प्रमाणित है, तो उसे अपने प्रोफ़ाइल डेटा के साथ $_SESSION["auth"] मिलता है
  • फिर जब उपयोगकर्ता मुख्य पृष्ठ या अन्य पृष्ठों को ब्राउज़ कर रहा होता है, जिन्हें प्रमाणीकरण की आवश्यकता होती है, तो वे केवल यह जांचते हैं कि $_SESSION["auth"] सेट है या नहीं।

इसे कैसे हल करें इस पर कोई सुझाव?

संपादित करें: एक छोटा सा स्पष्टीकरण। मेरे पास प्रत्येक पृष्ठ पर एक सत्र आईडी है। जब मैं पुनर्निर्देशित हो जाता हूं तो वह आईडी नहीं बदलती है। मेरे पास उस पृष्ठ पर $_SESSION चर में कोई डेटा नहीं है जिस पर मैं रीडायरेक्ट करता हूं।

1
ubes 1 अक्टूबर 2010, 11:34
यदि आप उस पृष्ठ पर कोड जोड़ते हैं जहां आपने अपना सत्र डेटा खो दिया है <pre><?php print_r($_SESSION); ?></pre>, दूसरे शब्दों में; एक सत्र डंप?
 – 
Ben Fransen
1 अक्टूबर 2010, 11:44
प्रिंट_आर ($ _ सत्र); एक खाली स्ट्रिंग लिखता है
 – 
ubes
1 अक्टूबर 2010, 11:54
जब आप कहते हैं कि पहला "सर्वर के रूप में चलता है," क्या आपका मतलब एनटी सेवा के रूप में है? यदि ऐसा है, तो services.msc चलाएँ और कमांड लाइन की जाँच करें; कंसोल पर सर्वर चलाने के लिए आप जिस कमांड का उपयोग करते हैं वह बहुत समान होना चाहिए। मुझे लगता है कि एनटी सेवा के रूप में चलने वाले अपाचे के लिए एक अतिरिक्त स्विच हो सकता है, लेकिन यह इतना लंबा रहा है कि मुझे याद नहीं है कि यह क्या है।
 – 
Dagg Nabbit
1 अक्टूबर 2010, 12:09
'-k रनसर्विस' और कुछ नहीं।
 – 
ubes
1 अक्टूबर 2010, 12:22

3 जवाब

सबसे बढ़िया उत्तर

PHP सत्र निर्देशिका की अनुमतियों को देखें जहां सत्र के लिए फ़ाइलें संग्रहीत की जा रही हैं। अगर php के पास फाइल लिखने, बनाने और बदलने का अधिकार नहीं है तो आप अपने $_SESSION var में कुछ भी स्टोर नहीं कर पाएंगे।

1
ITroubs 1 अक्टूबर 2010, 16:07

मुझे समाधान मिला। वेबसर्वर चलाने वाले उपयोगकर्ता के पास httpd.conf में सभी पथों की अनुमति थी लेकिन PHP.ini में सभी पथों तक पहुंचने की अनुमति नहीं थी। session.save_path उन पथों में से एक है और यदि सर्वर सत्र डेटा संग्रहीत नहीं कर सकता है तो सर्वर सत्र डेटा तक नहीं पहुंच सकता है।

Session.save_path को C:\Windows\Temp पर सेट किया गया था और शुरू में मुझे नहीं लगता था कि मुझे अपाचे dirs, php dirs और webroot के अलावा किसी भी चीज़ की अनुमति देनी होगी।

आपकी सभी मदद का धन्यवाद!

1
ubes 1 अक्टूबर 2010, 16:11

यदि उपयोगकर्ता आपकी साइट के रूट के उप-पथ पर जाता है और फिर ऊपर की ओर नेविगेट करता है तो सत्र टूट जाएगा। ऐसा इसलिए है क्योंकि कुकी केवल उस पथ के लिए सेट की जाएगी, आपके संपूर्ण डोमेन के लिए नहीं। अधिक जानकारी यहाँ: http://www.php.net/manual /en/function.session-start.php#91298

0
Dagg Nabbit 1 अक्टूबर 2010, 11:41
मैं https: //domain.com/login से https: //domain.com/profile पर रीडायरेक्ट करता हूं, दोनों लिंक https: //domain.com/index.php पर mod_rewrite द्वारा फिर से लिखे गए हैं।
 – 
ubes
1 अक्टूबर 2010, 11:51
ऐसा लगता है कि यह तब आपकी समस्या नहीं है। फिर भी, संग्रहीत कुकी पथों को दोबारा जांचने में कोई दिक्कत नहीं होती है, सुनिश्चित करें कि वे रूट पर सेट हैं।
 – 
Dagg Nabbit
1 अक्टूबर 2010, 12:00
चेक किया गया। दोनों रूट करने के लिए तैयार हैं। याद रखें कि मेरे पास एक ही PHP कोड एक और अपाचे पर सुचारू रूप से चल रहा है, इसलिए मुझे उम्मीद नहीं है कि यह मेरे कोड में कोई समस्या है। पूरी तरह से एक विंडोज़, अपाचे या PHP सेटिंग्स समस्या।
 – 
ubes
1 अक्टूबर 2010, 12:18
शायद ऐसा... आप print_r($_SERVER) और phpinfo() से आउटपुट की तुलना करने की कोशिश कर सकते हैं और देख सकते हैं कि दोनों सर्वरों के बीच कोई स्पष्ट अंतर है या नहीं...
 – 
Dagg Nabbit
1 अक्टूबर 2010, 13:37
इस बिंदु पर बस अंधेरे में शूटिंग हो रही है, लेकिन क्या सर्वर कंसोल पर काम करता है यदि आप इसे एनटी सेवा के बिना स्वयं चलाते हैं? हो सकता है कि कॉन्फ़िगरेशन भी समान हों, जैसे वे एक ही httpd.conf या पोर्ट या कुछ और का उपयोग कर रहे हों? वैकल्पिक रूप से, दोनों सर्वरों को NT सेवाओं के रूप में स्थापित करने का प्रयास क्यों न करें?
 – 
Dagg Nabbit
1 अक्टूबर 2010, 16:03