वार्निश और तारपीन


9

मुझे लग रहा है कि जब भी मैं अपने सर्वर पर वार्निश को पुनः आरंभ करता हूं, मैं अपने उपयोगकर्ताओं के लिए अपने सत्र खो रहा हूं।

यह वह मोड़ है जो मेरे ग्राहकों को उनकी खरीदारी की गाड़ियाँ ढीली कर देता है।

वार्निश के लिए यह सामान्य व्यवहार है या दोष देने के लिए मेरा वीसीएल है? ऐसा लगेगा कि इसका नहीं


आगे की जानकारी।

आगे की जांच करने पर, ऐसा प्रतीत होता है कि यह समस्या GitHub पर अंक # 725 से संबंधित है।

मेरी Magento की स्थापना 1.9.1.0 संस्करण है। यह भी कहा जाना चाहिए कि मेरा पूरा सीमांत https के तहत चलाया जा रहा है। एसएसएल को समाप्त करने के लिए मैं वार्निश के सामने पाउंड का उपयोग कर रहा हूं।

ऐसा प्रतीत होता है कि इस संस्करण में डिफ़ॉल्ट मैगेंटो व्यवहार एक माध्यमिक फ्रंटएंड कुकी बनाने के लिए है, जिसे आमतौर पर 'फ्रंटेंड_सीड' कहा जाता है, एमआईटीएम हमलों के खिलाफ परीक्षण करने के प्रयास में।

ऐसा लगता है कि टर्पेन्टाइन द्वारा उत्पन्न वीसीएल फ़ाइल इस कुकी पर पारित नहीं हो रही है, जिससे अमान्य सत्र हो रहे हैं।

क्या कोई समझा सकता है कि कैसे VCL फ़ाइल उन कुकीज़ पर गुजरती है जो Magento क्लाइंट को बनाती है?


मैंने इसे आवश्यक कुकीज़ उत्पन्न नहीं करने के लिए वार्निश तक सीमित कर दिया है।

Magento 1.9.1.0 के रूप में, MITM हमलों को रोकने के लिए एक 'फ्रंटेंड_सीड' कुकी पेश की गई थी।

यह Mage_Core_Model_Session_Abstract_Varienलाइन 135 की कक्षा में पाया जा सकता है

if (Mage::app()->getFrontController()->getRequest()->isSecure() && empty($cookieParams['secure'])) {
    // secure cookie check to prevent MITM attack
    $secureCookieName = $sessionName . '_cid';
    if (isset($_SESSION[self::SECURE_COOKIE_CHECK_KEY])
        && $_SESSION[self::SECURE_COOKIE_CHECK_KEY] !== md5($cookie->get($secureCookieName))
    ) {
        session_regenerate_id(false);
        $sessionHosts = $this->getSessionHosts();
        $currentCookieDomain = $cookie->getDomain();
        foreach (array_keys($sessionHosts) as $host) {
            // Delete cookies with the same name for parent domains
            if (strpos($currentCookieDomain, $host) > 0) {
                $cookie->delete($this->getSessionName(), null, $host);
            }
        }
        $_SESSION = array();
    }
    if (!isset($_SESSION[self::SECURE_COOKIE_CHECK_KEY])) {
        $checkId = Mage::helper('core')->getRandomString(16);
        $cookie->set($secureCookieName, $checkId, null, null, null, true);
        $_SESSION[self::SECURE_COOKIE_CHECK_KEY] = md5($checkId);
    }
}

ग्राहकों के लिए सुरक्षित कनेक्शन प्रदान करने के लिए, वार्निश को एक 'फ्रंटएंड' कुकी बनानी होगी, जिसे बाद में Magento उस विशेष ग्राहक की पहचान करने के लिए उपयोग करेगा। अब तक, यह ऐसा करना ठीक प्रतीत होता है। हालाँकि, यह Magento 1.9.1.0 जैसा दिखता है, इसे अब 'फ्रंटेंड_सीड' कुकी भी जेनरेट करना होगा।

वार्निश को ऐसा करना पड़ता है, क्योंकि प्रतिक्रिया को कैशिंग करके, यह प्रतिक्रिया हेडर को भी कैश करता है, जिसमें 'फ्रंटेंड' कुकीज़ शामिल हैं।

इसलिए, डिफ़ॉल्ट रूप से, वार्निश किसी भी कुकीज़ को विस्फोट कर देता है जो बैकएंड तब प्रतिक्रिया करता है जब इसकी हैंडलिंग 'लुकअप' या 'पास' की स्थिति होती है। यह एक ही कैश्ड फ्रंटेंड कुकी के साथ जारी किए जा रहे कई उपयोगकर्ताओं को रोकने के लिए करता है (जो लोगों के सत्रों से समझौता करेगा)।

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

तारपीन VCL vcl_recvफ़ंक्शन में इस कोड द्वारा देखे गए विधि प्रकार GET या HEAD का कोई भी अनुरोध 'पाइप' करेगा :

// We only deal with GET and HEAD by default
// we test this here instead of inside the url base regex section
// so we can disable caching for the entire site if needed
if (!true || req.http.Authorization ||
    req.request !~ "^(GET|HEAD)$" ||
    req.http.Cookie ~ "varnish_bypass=1") {
    return (pipe);
}

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


कैसे ठीक करना है?

मेरा मानना ​​है कि इस मुद्दे का हल तारपीन का VCL है जो आने वाले आगंतुकों के लिए एक 'फ्रंटएंड_सीड' कुकी भी बनाता है, और फिर तारपीन मॉड्यूल को उस कुकी को वर्तमान सत्र में जोड़ देता है, जैसा कि अब 'फ्रंटएंड' कुकी के लिए है।

तो ... हम इसे कैसे लागू करते हैं?

कैविएट: मैं गलत हो सकता हूं, मैं वार्निश के लिए बहुत नया हूं, लेकिन मैंने अभी इस पर बहुत घंटे बिताए हैं और यही मैं देख रहा हूं, अभी जो भी समर्थन करता है वह बहुत सराहा जाएगा।

अंतिम अद्यतन और मेरी राशि का फिक्स - 2015 10 30

वार्निश में 'फ्रंटेंड_सीड' कुकी बनाना असंभव है क्योंकि कुकी को मैजेंटो द्वारा सर्वर पर यादृच्छिक रूप से बनाया जाता है और ग्राहकों के सत्र में एमडी 5 हैश के रूप में संग्रहीत किया जाता है। यह आपको ग्राहक सत्र के बाहर बाहरी रूप से बनाने से रोकता है।

इस मुद्दे पर मैं जिस समाधान के साथ आया था, उसका सबसे अच्छा समाधान यह है कि मैगेंटो जिस तरह से ग्राहक सत्रों को संभालता है, उसे अलग कर दे।

वर्तमान में Magento इस तरह से अमान्य सत्रों को संभालता है:

IF
    The requested session by the customer is flagged as invalid
THEN
    Stop processing request
    Redirect to the appropriate page

मेरा नया तर्क निम्नानुसार है:

IF
    The requested session by the customer is flagged as invalid
THEN
    Create a new session
    Complete the requested task
    Redirect to the appropriate page

मेरा नया दृष्टिकोण ग्राहकों की प्रतिक्रिया को संभालने की अनुमति देता है, यहां तक ​​कि पहली यात्रा पर भी। यह नहीं है कि तारपीन के नवीनतम कार्यान्वयन कैसे काम करते हैं।


मेरा मुद्दा, अंक # 829 - / गठजोड़ / पत्रिका-तारपीन / मुद्दे / 829 GitHub पर। मेरी वीसीएल की एक प्रति यहां मिल सकती है।


GitHub पर मेरा मुद्दा बंद कर दिया गया है क्योंकि यह यहां पाई गई एक बहुत पुरानी समस्या का एक डुप्लिकेट है:

अंक # 345


1
मैंने देखा कि आपने सिर्फ GitHub पर एक मुद्दा खोला, मैं कल सुबह इसकी जांच करूंगा। इस बीच आप github.com/nexcess/magento-turpentine/issues/90 और github.com/nexcess/magento-turpentine/issues/92 चेक कर सकते हैं ।
मलबपर्धा

यह असंभव है, सत्र मैजेंटो और उपयोगकर्ता ब्राउज़र में संग्रहीत हैं, वार्निश का इससे कोई लेना-देना नहीं है। कुछ शायद गलत कॉन्फ़िगर किया गया है।

जवाबों:


4

यह आपके कुकी पथ को सही ढंग से सेट नहीं करने के कारण हो सकता है।

Admin->Configuration->Web->Session Cookie Managementयदि पहले से ही नहीं है तो अपनी कुकी सेटिंग सेट करने का प्रयास करें ।

वैकल्पिक रूप से यह वार्निश में एक बग हो सकता है।


धन्यवाद @performadigital, मैंने कुछ और जांच की है और अपने प्रश्न को अपडेट कर रहा हूं।
पीटर ए

1

मुझे संदेह है कि आपका मुद्दा हाल ही के तारपीन अद्यतन द्वारा हल हो जाएगा: https://github.com/nexcess/magento-turpentine/commit/66615b7cc987854e8671911ab6c3/22afb808a2

हटाए गए सत्र पीढ़ी # 806, # 345 और अतिरिक्त सत्र, खाली कार्ट आदि से संबंधित कई अन्य समस्याएं ठीक करता है।

नए सत्र के लिए पहले पृष्ठ लोड पर वार्निश को नजरअंदाज कर दिया गया।

इसलिए वार्निश को अब सेशन कुकी (फर्स्ट पेज रिक्वेस्ट पर कैश से जवाब न दे पाने की कीमत पर) को नकली बनाने की कोशिश करनी होगी

हमने पाया है कि इस परिवर्तन ने हमारे Magento के कई ग्राहकों के लिए इस समस्या को हल कर दिया है (हम www.section.io चलाते हैं )।


1
धन्यवाद @mattnthat, मैं प्रस्तावित समाधान से अवगत हूं लेकिन मुझे यह स्वीकार्य नहीं लगता। मैंने एक अलग समाधान लागू करना समाप्त कर दिया। यदि सत्र वैध था, तो मैंने Magento की जाँच की, और यदि यह स्क्रिप्ट को समाप्त करने के बजाय नहीं था, तो मैंने इसे एक नया सत्र आरंभ करने और अनुरोध को पूरा करने के लिए बनाया।
पीटर ए
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.