2010-11-17 14 views
14

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

मेरा सवाल यह है कि - पृथ्वी पर एक छवि को पहली जगह में एक सेट-कुकी शीर्षलेख कैसे मिलेगा? इसका कारण बनने के लिए एएसपी.NET फॉर्म प्रमाणीकरण मॉड्यूल क्या है - निश्चित रूप से यह मुख्य HTML सामग्री प्रतिक्रिया पर कुकी सेट करता है। मुझे लगता है कि ऑथ कुकी को डोमेन के बाद के सभी अनुरोधों के साथ भेजा जाता है, लेकिन मैं यह नहीं समझ सकता कि कुकी को पहले स्थान पर कैसे सेट किया गया है।

(बीटीडब्ल्यू यह समस्या कम से कम दो मौजूदा बड़ी ईकॉमर्स साइटों में अपराधी भी हो सकती है जो समान समाधान से पीड़ित हैं, बिना समाधान के, इसलिए यह हल करने के लिए एक अच्छा होगा)।

प्रतिक्रिया नीचे दिखाया गया है (फिडलर से लिया गया)।

HTTP/1.1 200 OK 
Cache-Control: public, max-age=86400,max-age=86400 
Content-Type: image/png 
Last-Modified: Thu, 04 Nov 2010 16:00:52 GMT 
Accept-Ranges: bytes 
ETag: "0528474397ccb1:0" 
Server: Microsoft-IIS/7.5 
Set-Cookie: my-auth-cookie=6BC25F1EF71989466A48C0120E7739E; path=/; HttpOnly 
Date: Wed, 17 Nov 2010 17:15:08 GMT 
Content-Length: 15790 

अद्यतन: अतिरिक्त जानकारी - हम Win2008 आर 2, 64 बिट पर आईआईएस 7.5 का उपयोग कर रहे हैं, और एप्लिकेशन कोई एप्लिकेशन पूल के तहत चल रहा है उपयोग कर रहा है एकीकृत पाइप लाइन/.net 4.

अद्यतन 2: मैं समस्या का समाधान नहीं ढूंढ रहा हूं, हमारे पास पहले से ही एक है। मैं इस सवाल का जवाब ढूंढ रहा हूं, यही कारण है कि यह पहली जगह में हुआ था? कृपया सबडोमेन के बारे में मुझे बताएं या कुकीज़ कैसे काम करते हैं!

अद्यतन 3: अनुरोध में जोड़ने:

GET https://www.example.com/sprite.png HTTP/1.1 
Host: www.example.com 
Connection: keep-alive 
Cache-Control: no-cache 
Pragma: no-cache 
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Cookie: my-auth-cookie=6BC25F1EF71989466A48C0120E7739E; 
+0

+1, बहुत ही रोचक सवाल। @ हूगो, क्या आप इस व्यवहार को पुन: उत्पन्न करने में सक्षम थे या यह यादृच्छिक है? –

+0

@ ह्यूगो, क्या आप अपनी साइट पर एसएसएल लागू कर रहे हैं क्योंकि मुझे लगता है कि यह कुकी 'सुरक्षित' ध्वज के बिना सेट है? –

+0

डारिन, हाँ हम एसएसएल लागू कर रहे हैं - पूरी साइट एसएसएल के तहत चल रही है, हालांकि समाप्ति बिंदु रिवर्स प्रॉक्सी (एआरआर स्थापित के साथ आईआईएस) वेब सर्वर स्वयं नहीं है। समस्या का समाधान एक अलग सबडोमेन/साइट की छवियों की सेवा करना है, लेकिन जैसा कि आप सही तरीके से नीचे बताते हैं कि सवाल का जवाब नहीं देता है, यह पहली जगह में कैसे हुआ/क्यों हुआ। –

उत्तर

0

अपने आप को इस का जवाब सवाल बाहर बंद करने और आगे के अपडेट रोकने के लिए।

जो व्यवहार मैं देख रहा था उसका मूल कारण स्थिर फाइलों (सीएसएस, छवियों, जेएस) पर एकीकृत पाइपलाइन सेटिंग कुकीज़ के कारण था - अधिक जानकारी के लिए टिप्पणी थ्रेड देखें।

यह हल किया गया था जब हम स्थिर सामग्री को उत्पादन/स्टेजिंग वातावरण में एक अलग मेजबान में स्थानांतरित कर देते थे।

0

क्योंकि आप स्थैतिक सामग्री को सुरक्षित करने के लिए प्रपत्र प्रमाणीकरण का उपयोग कर सकते हैं।

+1

और यह सवाल कैसे जवाब देता है? @Zain शेख उत्तर पर मैंने छोड़ी गई टिप्पणी देखें। –

-2

डिफ़ॉल्ट रूप से ब्राउज़र same domain पर किए गए प्रत्येक अनुरोध के साथ कुकीज़ भेजता है।

सरल समाधान आपकी छवियों को किसी अन्य डोमेन पर ले जाना है, जैसे youtube लोगों के पास सभी छवियों को सहेजने के लिए http://s.ytimg.com/yt/img/watch/ डोमेन है।

+2

क्या आप सवाल नहीं पढ़ते हैं? क्या आप 'सेट-कुकी' प्रतिक्रिया शीर्षलेख नहीं देखते हैं? यह एक कुकी सेट कर रहा है और क्लाइंट अनुरोध में 'कुकी' शीर्षलेख के माध्यम से इसे पास नहीं कर रहा है। –

+0

धन्यवाद डारिन :-) –

1

मुझे संदेह है कि यह वास्तव में एक .NET समस्या प्रति-से नहीं है, और आपके मुद्दों की कुंजी वास्तव में रिवर्स प्रॉक्सी है।

फॉर्म-एथेड पथ से स्थैतिक सामग्री की सेवा करते समय, आपके कनेक्शन से जुड़े कुकीज़ को इसके साथ भेजा जाएगा। तो, यदि आप उपयोगकर्ता एक्स, सत्र 1 के रूप में साइन इन हैं और छवि foo.png प्राप्त करते हैं, तो आपकी रिवर्स प्रॉक्सी पीएनजी फ़ाइल को हेडर के साथ आती है जो दर्शाती है कि इसे कैश किया जा सकता है।

अगली बार जब फ़ाइल का अनुरोध किया जा रहा है, तो रिवर्स प्रॉक्सी फ़ाइल को सीधे उस फाइल से जोड़ती है, जिसे वह उस फाइल से जुड़ा हुआ था, जब इसे आखिरी बार मिला था।

एक प्रयोग के रूप में, मैं सुझाव देता हूं कि रिवर्स-प्रॉक्सी को इसकी कैशिंग कार्यक्षमता को बंद करने के लिए सेट करें और देखें कि समस्या बनी रहती है या नहीं।

यदि आपको सामग्री की कैशिंग करने के लिए रिवर्स प्रॉक्सी की आवश्यकता है - तो मैं यह देखने के लिए सुझाव दूंगा कि प्रॉक्सी को कैश की गई फ़ाइलों के लिए कुकीज़ को अनदेखा करने के लिए कहा जा सकता है या फ़ाइलों को किसी अन्य कुकीज/ऑथ-कम पर ले जाया जा सकता है या नहीं डोमेन।

+0

विल, आप काफी सही हैं, यह समस्या है, जिसे हमने पहले से ही उत्पादन में हल कर लिया है। यह समुदाय के लिए एक और सवाल था कि यह पहली जगह क्यों हुआ (स्थिर सामग्री पर कुकीज़ सेट करना)। आईआईएस और एएसपी.नेट को एक साथ टाई करना उस समय एक अच्छा विचार हो सकता है लेकिन यह उत्पादन परिदृश्यों में वास्तविक दर्द साबित कर रहा है (मेरे पास प्रमाणीकरण विकल्पों के बारे में serverfault पर एक और खुला प्रश्न है)। –

+0

हाय ह्यूगो, फिर से - मुझे नहीं लगता कि यह .NET/IIS सीधे है कि समस्या है। जैसा कि मैंने उल्लेख किया है, समीकरण से रिवर्स-प्रॉक्सी हटा दें, और यदि मैं सही हूं - समस्या दूर हो जाती है। अगर मैं गलत हूं, तो यह कुछ गहरा है। –

2

आईआईएस में मुझे एक बग की तरह लगता है। मैं कुछ स्ट्रॉ-मैन कोड लिखने जा रहा हूं यह देखने के लिए कि क्या मैं पूरी तरह से समझ रहा हूं कि क्या हो रहा है और परिणाम पोस्ट करें। मैं यह देखने के लिए आईआईएस 7 और आईआईएस 7.5 पर भी इसका परीक्षण करूंगा कि यह अलग है या नहीं।

यह वास्तव में ऐसा नहीं लगता है कि एक अनुरोध को पिछले अनुरोध से जुड़ी कोई भी कुकी प्राप्त करनी चाहिए (हमारे पास हमारी साइट पर कोई कैशिंग प्रॉक्सी नहीं है और यह हमारे आंतरिक नेटवर्क पर हमारे साथ हो रहा है, इसलिए मेरा निष्कर्ष यह है कि आईआईएस यह कहीं और कर रहा है)।

--Owen

+0

ठीक है, एक साधारण स्ट्रॉ-मैन उदाहरण में पुन: पेश नहीं किया जा सकता है (छवियों के समूह के साथ वेब पेज; दूसरा कुकी सेट करने के लिए)। कोई रास्ता नहीं, कोई भी छवियों में दूसरी मशीन से कुकी सेट नहीं है ... FWIW –