2010-08-13 11 views
5

सभी संभाल करने,पीएचपी सत्र कई सर्वरों

मैं एक PHP5 वेब अनुप्रयोग Zend फ्रेमवर्क और MVC के साथ लिखा है। यह एप्लिकेशन एक ही सेटअप के साथ 2 सर्वर पर स्थापित है। सर्वर एक्स में php5/MySQL/अपाचे और सर्वर वाई भी समान है। हमारे पास दोनों सर्वरों के बीच एक सामान्य डीबी सर्वर नहीं है।

मेरा एप्लिकेशन सर्वर एक्स और सर्वर वाई पर https के माध्यम से व्यक्तिगत रूप से एक्सेस करते समय काम करता है। लेकिन जब हम लोड संतुलन चालू करते हैं और दोनों सर्वर ऊपर होते हैं, तो सत्र खो जाते हैं।

मैं कैसे सुनिश्चित कर सकता हूं कि मेरे सत्र सर्वर पर बने रहें? क्या मुझे अपने डीबी को तीसरे सर्वर पर बनाए रखना चाहिए और इसे सत्र लिखना चाहिए? यदि हां, तो ऐसा करने का सबसे आसान और सबसे सुरक्षित तरीका क्या है?

धन्यवाद

उत्तर

7

memcached इस समस्या को हल करने के लिए एक लोकप्रिय तरीका है। आपको इसे बस उठाने और चलाने (आसान) करने और सत्र php.ini फ़ाइल को अपडेट करने के लिए इसे सत्र स्टोरेज के रूप में memcached का उपयोग करने की आवश्यकता है।

php.ini में आप को संशोधित करेगा:

session.save_handler = memcache 
session.save_path = "" 

सामान्य विचार के लिए: PHP Sessions in Memcached

मेमकैड के साथ काम करने के लिए ज़ेंड सत्र हैंडलर स्थापित करने पर कई ट्यूटोरियल हैं। अपना चयन ले लो।

0

क्या मुझे अपने डीबी को तीसरे सर्वर पर बनाए रखना चाहिए और इसमें सत्र लिखना चाहिए?

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

+0

क्या आप अपने पिछले काम से डीबी में सत्रों को संग्रहीत करने के लिए एक उदाहरण प्रदान कर सकते हैं? – Jake

+0

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

+0

यहां कुछ ऐसा है जो मैंने किया था ... यह दिनांकित हो सकता है, मुझे नहीं पता, क्योंकि मैंने थोड़ी देर में PHP के सत्र हैंडलिंग का उपयोग किया है। http: //www.tuxradar।कॉम/व्यावहारिक/10/3/7 बस सुनिश्चित करें कि आपने सत्र आईडी पर एक अनुक्रमणिका डाली है या यह धीमा हो सकता है! – GrandmasterB

0

एक और विकल्प आपके लोड बैलेंसर पर चिपचिपा सत्र सुविधा का उपयोग करना है। यह क्या करेगा उपयोगकर्ताओं को कुछ सर्वरों पर रखना है। तो जब उपयोगकर्ता 1 साइट पर आता है, तो उन्हें सर्वर एक्स पर निर्देशित किया जाएगा। प्रत्येक बाद के अनुरोध को सर्वर एक्स पर भी निर्देशित किया जाएगा। यह आपको सर्वर के बीच लगातार सत्रों के बारे में चिंता करने की अनुमति नहीं देता है, क्योंकि प्रत्येक उपयोगकर्ता को निर्देशित करना जारी रहेगा सर्वर पर उनका सत्र है।

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

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