2012-11-28 14 views
5

मैंने "मुझे याद रखें" विकल्प के लिए Improved Persistent Login Cookie Best Practice लागू किया है।समानांतर AJAX अनुरोधों के साथ एक सतत लॉगिन कुकी को कैसे गठबंधन करें?

अनुरोध ठीक होने पर यह ठीक काम करता है (पारंपरिक पृष्ठ लोडिंग)। इस मामले में आप सुनिश्चित हैं कि अगले अनुरोध में एक ही श्रृंखला पहचानकर्ता और टोकन जो अंतिम बार सर्वर द्वारा भेजा गया था।

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

हम इस समस्या को कैसे हल करते हैं?

+0

इसके लायक होने के लिए, ड्रूपल में एक ही मुद्दे पर एक थ्रेड: http://drupal.org/node/327263 (कोई समाधान नहीं) – smhg

+0

उस ड्रूपल थ्रेड के दौरान एक समाधान प्रस्तावित किया गया था! – bluegaspode

उत्तर

0

मुझे लगता है कि आप मुझे सीएसआरएफ (क्रॉस साइट अनुरोध फोर्जरी) सुरक्षा टोकन के साथ याद करते हैं। सीएसआरएफ टोकन अनधिकृत "कार्यक्षमता निष्पादन" की संभावना को अक्षम करके एप्लिकेशन की रक्षा करते हैं। और वे प्रत्येक प्रतिक्रिया के लिए नॉनडेड्यूसिबल टोकन जारी करके और अनुरोध प्राप्त करने पर इसे सत्यापित करते हैं।

मुझे याद रखें सुविधा एक ऐसी सुविधा है जो उपयोगकर्ता को लॉगिन करने की अनुमति देती है, भले ही मूल सत्र लंबे समय तक चला गया हो। अपना उपयोगकर्ता नाम/पासवर्ड फिर से प्रदान करने की आवश्यकता के बिना। प्रत्येक सफल लॉगिन पर आपको एक बार या एक बार, मुझे अपना टोकन याद रखना चाहिए। हर प्रतिक्रिया में नहीं। आप प्रत्येक प्रतिक्रिया में सत्र कुकी सेट नहीं करते हैं, तो आप मुझे टोकन रीमेबर क्यों सेट करेंगे?

+0

मैंने गलत प्रश्न के लिंक को डाल दिया था। गलतफहमी के लिए खेद है। मैंने अब लिंक अपडेट किया है। – Dhiraj

+0

फिर भी वही सवाल है कि आप हर अनुरोध पर नई श्रृंखला क्यों जारी करना चाहते हैं? और लॉगिन पर नहीं? – fatfredyy

+0

@fatfreddy अगर हम केवल लॉगिन पर मुझे टोकन याद करते हैं, तो अगर यह चोरी हो जाता है और कोई इस टोकन के साथ अनुरोध भेजता है, तो उसके पास सिस्टम तक पहुंच है और यह पता लगाने का कोई तरीका नहीं है कि टोकन चोरी हो गया है या नहीं। हर अनुरोध के साथ एक नया टोकन उत्पन्न करने में मदद मिलती है। इस आलेख में यह अच्छी तरह से वर्णित है [http://jaspan.com/improved_persistent_login_cookie_best_practice] – Dhiraj

0

मैं इस बारे में कुछ पढ़ रहा हूं क्योंकि मेरे पास एक ही समस्या है।

बैरी जसपैन और चार्ल्स मिलर की तकनीक इस तथ्य के कारण अनुपयोगी (विशेष रूप से AJAX सेटअप में) प्रतीत होती है कि सर्वर पर एक नया टोकन उत्पन्न करने और कुकी में इसे लागू करने के बीच, जैसा कि आप इंगित करते हैं, बहुत कुछ हो सकता है।

हमारे मामले में यह असीमित प्रकृति है, लेकिन अन्य मामले हो सकते हैं जहां मूल्य कुकी में समाप्त नहीं होता है क्योंकि यह सर्वर पर संग्रहीत होता है (उदाहरण के लिए पृष्ठ से पहले नेविगेट करना)।

बैरी acknowledge this पर प्रतीत होता है।

दूसरा, टोकन को अवैध करना (जैसे पासवर्ड परिवर्तन पर) आपको बहुत सारी "भूत" कुकीज़ के साथ समाप्त होता है। उनमें से एक के साथ प्रत्येक पहुंच सभी अन्य सत्रों को अमान्य कर देती है (जो उस बिंदु पर उनके बीच मान्य होने की संभावना है)।

क्योंकि इन सीमाओं के

, मुझे लगता है कि सबसे अच्छा समाधान का एक संयोजन है:

  • HTTPS (SSL) प्रत्येक अनुरोध
  • ट्रैकिंग पर उपयोग
  • इस तकनीक है, लेकिन बिना फिर से पीढ़ी उपयोगकर्ता द्वारा अमान्यता (उपरोक्त दूसरी टिप्पणी को संभालने के लिए)
  • HTTP-केवल कुकीज़ (उन्हें स्क्रिप्ट पहुंच से बचने के लिए)

मैंने बैरी को अपने पृष्ठ पर इस बारे में एक नोटिस पर विचार करने के लिए एक संदेश भेजा है।

1

उपर्युक्त ड्रूपल थ्रेड (https://www.drupal.org/node/327263#comment-3428038) पर प्रस्तावित समाधान के आधार पर, मुझे आश्चर्य है कि क्या हमारे पास एक सरल एल्गोरिदम नहीं हो सकता है।

एक छोटी सी कैशिंग तालिका में "पुरानी" प्रतिस्थापित टोकन को संग्रहीत करने के बजाय, वर्तमान उपयोगकर्ता सत्र का उपयोग क्यों न करें?

1. User logs in with PL cookie 
If series & token are in PL table: 
    2. User session is populated with the last valid token 
    3. new token is given to client 
    4. user is logged in 
If series key is in PL table, but token is not: 
    2. check if current user session still holds the latest replaced token 
    If found: 
    3. user is logged in. No new token is provided since one was generated in the first request. 
    If not found: 
    3. Assume keys are stolen - series is destroyed 

इस एल्गोरिथ्म संतुलित परिदृश्यों हालांकि लोड में काम नहीं करेगा, जब सत्र स्थिति ठीक से हालांकि सभी नोड्स को दोहराया नहीं है!

+0

यदि पहला अनुरोध ब्राउज़र पर वापस नहीं गया है, तो क्या अन्य अनुरोधों के लिए सत्र आईडी अज्ञात नहीं है? – Tor

+0

हां, दुर्भाग्यवश आप सही हैं :( हम अपग्रेड किए गए टोकन (जो लगभग 5 सेकंड के लिए मान्य रहते हैं) के लिए स्थानीय इन-मेमोरी कैश में स्थानांतरित हो गए हैं। आईई चरण दो को इस कैश द्वारा प्रतिस्थापित किया गया है। – bluegaspode

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