मुझे पता है कि यह डुप्लिकेट के रूप में चिह्नित होने का एक बड़ा मौका है, लेकिन मैं जो खोज रहा हूं वह बिल्कुल नहीं मिल सका
यह एक आम समस्या है और मुझे यकीन है कि इसमें कुछ अच्छी तरह से परिभाषित सर्वोत्तम अभ्यास समाधान है
पृष्ठभूमि
एक एकल पृष्ठ SaaS ऐप में बहुत सारे ड्रैग एंड ड्रॉप हैं, उपयोगकर्ता समय की अवधि के लिए बहुत सर्वर संचार के बिना इसके साथ बातचीत कर सकता है
सर्वर सत्र केवल उपयोगकर्ता ऑब्जेक्ट रखता है, एक गैर लगातार सत्र कुकी का उपयोग करके
X घंटे के बाद सर्वर पर सत्र समाप्त हो जाता है
कुछ चीजें केवल लॉग-इन के दौरान भरी हुई हैं
मुसीबत
- उपयोगकर्ता ऐप पर काम करता है, जब किया जाता है, तो उपयोगकर्ता लॉग आउट नहीं करता है, बस ब्राउज़र को खुला रखता है
- एक्स घंटे से अधिक के बाद उपयोगकर्ता वापस आता है (सत्र सर्वर पर अमान्य है)
- उपयोगकर्ता को सर्वर कनेक्शन की आवश्यकता के बिना ऐप के साथ इंटरैक्ट करता है (ड्रग्स और चीजें ड्रॉप करता है, टेक्स्ट एडिट ...)
- केवल अगले सर्वर इंटरैक्शन पर (मान लें कि कोई ऑटो सेव नहीं है) उपयोगकर्ता को लॉगिन पृष्ठ पर फेंक दिया जाता है और अपना कुछ काम खो देता है
संभव समाधान
यहां कुछ समाधान दिए गए हैं, जिन्हें मैं सुनना चाहता हूं कि क्या कोई अन्य है, और यदि उनमें से किसी के साथ भी कुछ गलत है।
1. उपयोगकर्ता को कभी भी लॉग आउट न करें
- कैसे? या तो एक लंबा सत्र रखें, लगातार कुकी रखें, या javaScript "ज़िन्दा रखें" पिंग करें
- पेशेवरों : उपयोगकर्ता को कुछ भी चिंता करने की ज़रूरत नहीं है, उनके लिए समस्या को ठीक करता है
- विपक्ष : पीसीआई के अनुरूप नहीं, सुरक्षित नहीं है, और विकास में बदलाव की जरूरत है, उदाहरण के लिए केवल उपयोगकर्ता लॉग पर सत्र के लिए भरी हुई चीजें एक पब उप मॉडल (घटना परिवर्तन पर सुन) या कैश टाइमआउट के लिए स्थानांतरित करने की आवश्यकता है।
2. स्थानीय भंडारण
- कैसे? लॉग आउट होने पर, लॉग इन पेज पर रीडायरेक्ट करने के लिए अस्थायी रूप से स्टेट स्टोर करने के लिए नए लोकल स्टोरेज का उपयोग करें, एक बार लॉग इन करने के बाद भी बने रहें
- पेशेवरों : इसके अलावा "काम ऑफ़लाइन" समर्थन के लिए, न केवल सत्र टाइमआउट से निपटने के लिए
- विपक्ष : लागू करने के लिए कठिन, डेटा ट्री के राज्य मर्ज करने की आवश्यकता है, सभी ब्राउज़रों का समर्थन नहीं
3. ऑटो बचाओ
प्रत्येक उपयोगकर्ता क्रिया जो मॉडल को बदलती है, तुरंत (या किसी प्रकार की क्लाइंट साइड कतार के माध्यम से) बनी रहना चाहिए, उदाहरण के लिए, यदि वे चेकबॉक्स की जांच करते हैं, तो एक पाठ फ़ील्ड को बदलें, या किसी चीज़ को खींचने और छोड़ने के लिए, एक बार जब वे काम करते हैं, तो परिवर्तनों को जारी रखें।
- कैसे? मॉडल को बाँधने के लिए एक MV ** फ्रेमवर्क (Backbone.js / Knockout.js / Ember.js / Angular.js आदि) का उपयोग करें, और परिवर्तनों पर बने रहें।
- पेशेवरों : एक साफ समाधान की तरह लगता है, सत्र तब तक सक्रिय होता है जब तक उपयोगकर्ता सक्रिय होता है, कोई क्लाइंट साइड काम इसे जारी रखने के बिना नहीं किया जाता है।
- विपक्ष : अंतिम क्रिया उपयोगकर्ता सत्र समय समाप्त होने के बाद कर रहा है।
4. सत्र समाप्त होने के बाद उपयोगकर्ता को लॉग आउट करें
इसके कई दृष्टिकोण हो सकते हैं
सर्वर से "सत्र समाप्त हो गया है" पूछें - यह एक पकड़ 22 / श्रोडिंगर की एक बिट है, क्योंकि सर्वर के लिए केवल सवाल सत्र का विस्तार करता है (टाइमआउट को पुनरारंभ करता है),
- कैसे? या तो एक सर्वर है जो इस तरह के प्रश्न का समर्थन करता है (मुझे किसी के बारे में पता नहीं है, लेकिन मैं जावा भूमि बनाता हूं) या, कोई व्यक्ति केवल सत्र आईडी की एक तालिका रख सकता है, और अंतिम बार मैन्युअल रूप से पहुंच सकता है, और सत्र पारित करके सर्वर से पूछ सकता है कुकी के बजाय एक पैरामीटर के रूप में आईडी, मुझे यकीन नहीं है कि यह भी संभव है, लेकिन यह खतरनाक, असुरक्षित और खराब डिजाइन लगता है।
- पेशेवरों : यदि सर्वर में ऐसा मूल समर्थन था, तो एक साफ, वैध प्रश्न की तरह लगता है (यह पूछते हुए कि क्या उपयोगकर्ता X के पास अभी भी सत्र है या नहीं और इसे नवीनीकृत किए बिना यदि वे करते हैं)
- विपक्ष : यदि सर्वर इसका समर्थन नहीं करता है (और फिर से, मुझे नहीं पता कि किसी भी सर्वर या फ्रेमवर्क में यह कार्यक्षमता है), तो वर्कअराउंड में भारी जोखिम संभावित हैं।
मैंने सुना है एक वर्कअराउंड सर्वर साइड पर एक छोटा सत्र है, और एक जीवित ग्राहक पक्ष पिंग है, जिसमें पिंग की अधिकतम संख्या है
- कैसे? सर्वर पर शॉर्ट सेशन, क्लाइंट हर सेशन टाइमऑउट / 2 में, Y के अधिकतम रिट्रीव करता है।
- पेशेवरों : समस्या को हल करता है, त्वरित और गंदा
- विपक्ष : एक हैक की तरह महसूस करता है, सर्वर को करने देने के बजाय सत्र को खुद को नवीनीकृत करना
ग्राहक पक्ष टाइमर
कैसे? ग्राहक पक्ष पर एक टाइमर रखें और सर्वर के साथ इसे सिंक करें इसे प्रत्येक अनुरोध पर पुनरारंभ करके अधिकतम सर्वर सत्र टाइमआउट के बराबर होने के लिए कुछ पैडिंग है, उपयोगकर्ता द्वारा सर्वर को कोई अनुरोध नहीं भेजने के बाद, यूआई एक "सत्र दिखाता है" क्या आप इसे जारी रखना चाहते हैं? " (जैसे आपके पास ऑनलाइन बैंकिंग है)
पेशेवरों : समस्या को ठीक करता है
- विपक्ष : सिंक कार्यों को सुनिश्चित करने की आवश्यकता को छोड़कर किसी के बारे में सोच भी नहीं सकते
प्रश्न
मैं शायद उपरोक्त विश्लेषण में कुछ याद कर रहा हूं, कुछ मूर्खतापूर्ण गलतियां हो सकती हैं, और मैं उन्हें सुधारने में आपकी मदद करना चाहूंगा। इसके लिए मेरे पास और क्या उपाय हो सकते हैं?
now
। 4.2 आपके सर्वर को मारने और एंड्रॉइड पर लागत को बढ़ाने के लिए 4.3 की तरह एक शानदार आवाज़ है। होम स्क्रीन पर लौटने पर मुझे पूरा यकीन है कि प्रक्रिया को रोक दिया गया है और यह आपके क्लाइंटसाइड टाइमर के साथ हस्तक्षेप भी कर सकता है।