2009-11-16 16 views
5

मुझे किसी वेबसाइट पर लॉगिन करने और एक क्रिया करने की आवश्यकता है। वेबसाइट बाकी आधारित है तो मैं आसानी से ऐसा करने से प्रवेश कर सकते हैं (लॉगिन जानकारी URL पर क्वेरी स्ट्रिंग के रूप में शामिल किया गया है, तो मैं dont't साख निर्धारित करने की आवश्यकता):सी # क्लाइंट पर HTTPS पर सत्र बनाए रखने

CookieContainer cookieJar = new CookieContainer(); 

HttpWebRequest firstRequest = (HttpWebRequest) WebRequest.Create(loginUrl); 
firstRequest.CookieContainer = cookieJar; 
firstRequest.KeepAlive = true; 
firstRequest.Method = "POST"; 
HttpWebResponse firstResponse = (HttpWebResponse)firstRequest.GetResponse(); 

यही काम करता है और मुझे लॉग में। मुझे सत्र बनाए रखने के लिए एक कुकी वापस मिलती है और यह ऊपर दिखाए गए कुकीज में संग्रहीत है। तब मैं इस जैसे एक दूसरे अनुरोध करते हैं:

HttpWebRequest secondRequest = (HttpWebRequest) WebRequest.Create(actionUrl); 
secondRequest.Method = "POST"; 
secondRequest.KeepAlive = true; 
secondRequest.CookieContainer = cookieJar; 
WebResponse secondResponse = secondRequest.GetResponse(); 

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

मैंने HTTP शीर्षकों की जांच करने के लिए फिडलर का उपयोग किया है, लेकिन मुझे यह मुश्किल लगता है क्योंकि यह HTTPS है। (मुझे पता है कि मैं इसे डिक्रिप्ट कर सकता हूं लेकिन अच्छी तरह से काम नहीं कर रहा है।)

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

मैं HTTPS से बहुत परिचित नहीं हूं। क्या मुझे अपना सत्र बनाए रखने के लिए कुछ और करने की ज़रूरत है? मैंने सोचा कि कुकी यह होगी, लेकिन शायद दो अनुरोधों में मुझे कुछ और बनाए रखने की ज़रूरत है?

यहाँ हेडर लौटे जब मैं पहली बार अनुरोध में भेज रहे हैं (सिवाय मैं मासूम की रक्षा करने के लिए कुकी बदल गया है!):

X-DB-Content-length=19 
Keep-Alive=timeout=15, max=50 
Connection=Keep-Alive 
Transfer-Encoding=chunked 
Content-Type=text/html; charset=WINDOWS-1252 
Date=Mon, 16 Nov 2009 15:26:34 GMT 
Set-Cookie:MyCookie stuff goes here 
Server=Oracle-Application-Server-10g 

किसी भी मदद की सराहना की जाएगी, मैं विचारों से बाहर चल रहा हूँ।

उत्तर

4

मैं अंत में मिला यह मेरे कार्यक्रम से HTTP यातायात decrypting के बाद काम करना

भी देखते हैं।

कुकी जो मैं वापस प्राप्त कर रहा हूं वह पथ चर सूचीबद्ध नहीं है। तो .NET वर्तमान पथ लेता है और वर्तमान पृष्ठ सहित कुकी पर पथ के रूप में असाइन करता है। यानी: यदि यह http://mysite/somepath/somepage.htm पर था तो यह कुकी पथ =/somepath/somepage.htm सेट करेगा। यह एक बग है क्योंकि इसे "/" असाइन किया जाना चाहिए जो सभी वेब ब्राउज़र करता है। (उम्मीद है कि वे इसे ठीक करें।)

इस पर ध्यान देने के बाद मैंने कुकी पकड़ ली और पथ संपत्ति को संशोधित किया और सब कुछ ठीक काम करता है।

इस तरह की कोई समस्या वाला कोई भी व्यक्ति फिडलर को चेक आउट करता है। ।नेट आपके प्रोग्राम से http ट्रैफ़िक डिक्रिप्ट करने के लिए विंडोज सर्टिफिकेट स्टोर का उपयोग करता है, आपको यहां दिए गए निर्देशों का पालन करना होगा: http://www.fiddler2.com/Fiddler/help/httpsdecryption.asp। आपको फिडलर के विकल्प \ HTTPS टैब के तहत डिक्रिप्शन चालू करने की भी आवश्यकता होगी।

+0

माइक्रोसॉफ्ट ने इसे .NET 4. – Kelly

+0

में तय किया है हाय केली, मुझे कुछ सत्र का समय भी समाप्त हो रहा है जो आपके मामले के समान हो सकता है, क्या आप कृपया इस लिंक पर एक नज़र डालें: http://stackoverflow.com/ प्रश्न/22957840/क्रॉलिंग-सत्र-समाप्त धन्यवाद – bluewonder

0
MSDN से

:

एक उपयोगकर्ता आगे और पीछे की ओर बढ़ता है, सुरक्षित और सार्वजनिक क्षेत्रों, ASP.NET-उत्पन्न सत्र कुकी के बीच (या URL यदि आप कुकी-कम सत्र स्थिति सक्षम किया है) उन लोगों के साथ ले जाता है सादे पाठ में, लेकिन प्रमाणीकरण कुकी कभी भी अनएन्क्रिप्टेड HTTP कनेक्शन पर पारित नहीं होती है जब तक कि सुरक्षित कुकी प्रॉपर्टी सेट हो।

तो मूल रूप से, 'सुरक्षित' संपत्ति 'झूठी' पर सेट होने पर कुकी को HTTP और HTTPS दोनों पर पारित किया जा सकता है। how can I share an asp.net session between http and https

+0

मुझे यकीन नहीं है कि मैं समझता हूं। मैं क्लाइंट पर हूं, इस अनुरोध के सर्वर पक्ष नहीं। मुझे सर्वर पर दो या दो से अधिक कॉलों में सत्र बनाए रखने की आवश्यकता है, लेकिन भले ही मैं इसके साथ कुकी ला रहा हूं, यह पहचानने में प्रतीत नहीं होता कि मैं एक ही सत्र का उपयोग कर रहा हूं। – Kelly

+0

वह उस साइट पर विश्वास करने वाला थोड़ा उलझन में था जिसे आप एएसपी.Net आधारित थे, लेकिन जब भी उसका सुझाव कुकी सेट करना था, तो आप पहली कॉल की सुरक्षित संपत्ति के बाद वापस आते हैं और देखें कि क्या यह काम करता है (मुझे लगता है) – John

+0

मैंने इसे आज़मा दिया। कुकीज सुरक्षित = झूठी के रूप में वापस आ गईं। मैंने उन्हें दूसरे अनुरोध के लिए सच में सेट किया, लेकिन अभी भी कोई भाग्य नहीं है। – Kelly

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