2008-12-11 15 views
8

मैं एक PHP वेब एप्लिकेशन बना रहा हूं जो उपयोगकर्ता विशिष्ट जानकारी संग्रहीत करता है जो अन्य उपयोगकर्ताओं के साथ साझा नहीं किया जाता है।

कैशिंग के लिए $ _SESSION चर में इस जानकारी में से कुछ को स्टोर करना अच्छा विचार होगा? उदाहरण के लिए: उपयोगकर्ता ने अपने खाते के लिए बनाए गए श्रेणियों की एक सूची कैश करें।

उत्तर

10

यह रूप में लंबे समय सत्र तंत्र का एक उचित उपयोग हो के रूप में आप यह ध्यान में रखना होगा:

  • सत्र समय की एक अनिश्चित अवधि के लिए मौजूद नहीं होता।
  • जब सत्र से खींच, यह सुनिश्चित करें कि आप वास्तव में एक परिणाम (ASP.NET शून्य अगर सत्र/समाप्त हो गया है को मंजूरी दे दी वापस आ जाएगी)
  • सर्वर पुनरारंभ सत्र कैश पोंछ कर सकते हैं मिल गया।
  • सुविधा के लिए यह प्रदर्शन करें, प्रदर्शन नहीं।

  • स्टोर वरीयताओं में
    • उपयोगकर्ता लॉग (: उच्च प्रदर्शन कैशिंग के लिए, एक उचित तंत्र (यानी memcached)

    एक अच्छा उपयोग पैटर्न इस तरह होगा (ईथर कुकीज़ या सत्र) का चयन पृष्ठभूमि रंग, पिछले 10 रिकॉर्ड देखे गए, श्रेणियां) सत्र/कुकी में।

  • किसी पृष्ठ के प्रतिपादन पर, सत्र/कुकी मानों का संदर्भ लें (सुनिश्चित करें कि वे वैध मान हैं और शून्य नहीं हैं)।

चीजें एक कुकी

  • कुछ भी संवेदनशील (प्रयोग सत्र) की दुकान मत करो में करने के लिए नहीं।
  • एक कुकी मान आपको किसी भी चीज़ (उपयोग सत्र) तक पहुंच/अस्वीकार नहीं करना चाहिए।
  • ट्रैप त्रुटियां, झंडे और तारों को मानें जो आप उम्मीद करते हैं, हो सकता है, गुम हो सकता है, पारगमन में बदला जा सकता है।

मुझे यकीन है कि अन्य बातों पर भी विचार करना है, लेकिन यह मेरे सिर के शीर्ष से बाहर है।

+0

मैंने कहीं पढ़ा है कि memcached कम ओवरहेड डेटा पुनर्प्राप्ति के लिए इसके लायक नहीं था। क्या सत्र का उपयोग करने से तेज़ है? – menko

+0

memcached वह जगह है जहां आप बिट्स और जानकारी के टुकड़े संग्रहित कर रहे हैं ताकि आपको डेटा स्टोर को मारना न पड़े। यह आपके ऐप और डीबी सर्वरों का विस्तार करने के बाद बहुत अधिक ट्रैफिक वेबसाइटों और उन चीजों में से एक है जिसे आप कार्यान्वित करना शुरू कर देते हैं। –

+0

memcached डेटाबेस से बहुत तेज है, लेकिन अभी भी फ़ाइल-आधारित $ _SESSION पहुंच से धीमा है क्योंकि आपको स्थानीय डिस्क तक पहुंचने के बजाय नेटवर्क अनुरोध करना है। इसके बजाय इसका उपयोग करने का कारण कई सर्वरों में स्थिरता के लिए है। –

4

कि अच्छी तरह से डेटा की अपेक्षाकृत कम मात्रा के लिए काम कर सकता था, लेकिन आप को ध्यान में कुछ चीजें आपको करना होगा: डिस्क या डेटाबेस या कुछ और पर निर्भर करता है पर

  1. $ _SESSION अनुरोधों के बीच कहीं न कहीं संग्रहीत किया जाता है, फ़ाइल जो आप उपयोग करना चुनते हैं (फाइल करने के लिए डिफ़ॉल्ट)
  2. $ _SESSION एक ही मशीन पर एक ही उपयोगकर्ता के लिए स्थानीय है।
  3. सत्र एक टीटीएल (जीने के लिए समय), वे, समय की एक निर्धारित राशि (जो आप को नियंत्रित)
  4. कुछ परिस्थितियों में, सत्र ब्लॉक कर सकते हैं (शायद ही कभी एक मुद्दा के बाद गायब है, लेकिन मैं में फ्लैश यह स्ट्रीमिंग दौड़े हैं) यदि आपके द्वारा कैश करने का मतलब डेटा एकाधिक उपयोगकर्ताओं द्वारा एक्सेस किया जाना है, तो आप इसे अलग-अलग कैशिंग से तुरंत बेहतर कर सकते हैं।
2

आप केवल अपने सत्र के दौरान इस डेटा उपलब्ध चाहते हैं, तो हाँ। यदि आप कल इसे उपलब्ध करना चाहते हैं, या अब से 4 घंटे, तो आपको इसे डेटाबेस में सहेजने की आवश्यकता है।

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