2011-09-21 18 views
10

मैं एक ASP.NET MVC वेबसाइटअनुकरण ASP.NET प्रमाणीकरण कुकी

FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 

का उपयोग करता है में (वे .ASPXAUTH नाम के एक कुकी के साथ अंत) उन पर हस्ताक्षर करने को बनाए रखने।

ग्राहक चाहता है कि मैं पीडीएफ फीचर में एक HTML जोड़ूं, इसलिए मैं wkhtmltopdf लाइब्रेरी को लपेट रहा हूं और उसे कॉल कर रहा हूं। यह एक कमांड कि इस तरह दिखता है किया जा रहा समाप्त होता है:

wkhtmltopdf http://example.com/Foo/Edit/42 Foo.pdf 

हालांकि, कि, लॉगिन स्क्रीन की एक PDF बनाने के रूप में wkhtmltopdf उपयोगकर्ता एजेंट रीडायरेक्ट किया जाता है में परिणाम के बाद से यह सही कुकी नहीं है।

ठीक है कि के बाद से, wkhtmltopdf प्रलेखन के अनुसार, वहाँ इस तरह एक तर्क है:

--cookie <name> <value>   Set an additional cookie (repeatable) 

तो मैं होने के लिए आदेश को संशोधित:

wkhtmltopdf --cookie .ASPXAUTH 91C0DE4C... http://example.com/Foo/Edit/42 Foo.pdf 

कुकी मान कहाँ Request.Cookie[".ASPXAUTH"].Value का उपयोग कर लिया गया है ।

दुर्भाग्यवश, यह काम नहीं कर रहा है और मुझे नहीं पता कि क्यों। मुझे पता है कि एएसपी.नेट कुकी प्राप्त कर रहा है क्योंकि जब मैं रीडायरेक्ट के बाद लॉगिन पेज को तोड़ता हूं, तो मैं देख सकता हूं कि यह सेट हो गया है। तो एएसपी.NET मेरी प्रतिलिपि कुकी स्वीकार क्यों नहीं करता है?

यहाँ एक अनुरोध है कि ASP.NET (क्रोम से) की अनुमति देता है की सामग्री है:

GET http://localhost:50189/ReportingMonth/Edit/1193391 HTTP/1.1 
Host: localhost:50189 
Connection: keep-alive 
Cache-Control: max-age=0 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-CA,en;q=0.8,en-US;q=0.6 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Cookie: .ASPXAUTH=C8189041BF69FEF89A834B6F5035B786EC40145FFFBA3DBB6A04973BC58021C73D8D374E3577AA44BC26A784BC8A0C24831CF49FBD596BFFBA42C613E3C2C0C893D1587B7743D051643088BB8BAB667C047E0D1B84D7B76C4AADA7C62AB460D87C954BF9118BF5945E7D325D455CFD13A34C3DD5E597AFDF75D3C8EE76D8488B08ABBF6AE065B4C57CE47CB65AB17D65; language=en; ui-tabs-[object Object]=0 

और यहाँ लॉगिन करने के लिए है कि यह (wkhtmltopdf से) पुनर्निर्देश एक है:

GET http://localhost:50189/ReportingMonth/Edit/1193391 HTTP/1.1 
Cookie: .ASPXAUTH=C8189041BF69FEF89A834B6F5035B786EC40145FFFBA3DBB6A04973BC58021C73D8D374E3577AA44BC26A784BC8A0C24831CF49FBD596BFFBA42C613E3C2C0C893D1587B7743D051643088BB8BAB667C047E0D1B84D7B76C4AADA7C62AB460D87C954BF9118BF5945E7D325D455CFD13A34C3DD5E597AFDF75D3C8EE76D8488B08ABBF6AE065B4C57CE47CB65AB17D65 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Qt/4.7.1 Safari/533.3 
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 
Connection: Keep-Alive 
Accept-Encoding: gzip 
Accept-Language: en-US,* 
Host: localhost:50189 

उत्तर

16

मुझे समस्या मिली। मैंने देखा कि एक बार जब मैंने क्रोम के समान होने के लिए User-Agent फ़ील्ड (फिडलर में) को बदल दिया, तो यह ठीक काम करता था। तो मैंने थोड़ा वेब स्लेथिंग किया और this bug on the wkhtmltopdf project page खोजा।

बग से:

यह एएसपी .NET 4.0 के तहत एक मुद्दा है ऐसा लगता है के रूप में जो .NET व्याख्या उपयोगकर्ता-एजेंट स्ट्रिंग "Mozilla/5.0 (विंडोज, यू, Windows NT 6.1, एन -एयू) ऐप्पलवेबकिट/532.4 (केएचटीएम, जैसे गेको) क्यूटी/4.6.1 सफारी/532.4 " सहायक कुकीज़ जो मुझे लगता है कि एसीपी के तहत काम करने से - कुकी विकल्प को रोक रहा है।

तो ऐसा लगता है कि समाधान या तो wkhtmltopdf यह User-Agent हैडर बदल बनाने के लिए एक तरह से पता लगाना (होनहार नहीं लग रही है) या एक तरह से ASP.NET बताने के लिए है कि उपयोगकर्ता एजेंट समर्थन कुकीज़ करता है यह पता लगाने।

धन्यवाद डारिन डिमिट्रोव की मदद करने के लिए धन्यवाद।

अद्यतन

ठीक है, मैं पता लगा एएसपी बताने के लिए।नेट कि wttmltopdf द्वारा उपयोग किए जाने वाले क्यूटी वेब ब्राउज़र कुकीज़ का समर्थन करता है। आपको qt.browser नामक एक फ़ाइल बनाने की आवश्यकता है और इसे अपने ASP.NET प्रोजेक्ट की रूट में निर्देशिका कैल्डे App_Browsers में सहेजें। यहाँ तुम क्या qt.browser फ़ाइल में डाल दिया गया है:

<browsers> 
    <!-- Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.1 (KHTML, like Gecko) Qt/4.7.1 Safari/530.1 --> 
    <browser id="Qt" parentID="Safari"> 
     <identification> 
      <userAgent match="Qt/(?'version'(?'major'\d+)(\.(?'minor'\d+)?)\w*)" /> 
     </identification>  

     <capabilities> 
      <capability name="browser"       value="Qt" /> 
      <capability name="version"       value="${version}" /> 
      <capability name="majorversion"     value="${major}" /> 
      <capability name="minorversion"     value="${minor}" /> 
      <capability name="type"       value="Qt${major}" /> 
      <capability name="ecmascriptversion"    value="3.0" /> 
      <capability name="javascript"      value="true" /> 
      <capability name="javascriptversion"    value="1.7" /> 
      <capability name="w3cdomversion"     value="1.0" /> 
      <capability name="tagwriter"      value="System.Web.UI.HtmlTextWriter" /> 
      <capability name="cookies"       value="true" /> 
      <capability name="frames"       value="true" /> 
      <capability name="javaapplets"      value="true" /> 
      <capability name="supportsAccesskeyAttribute"  value="true" /> 
      <capability name="supportsCallback"    value="true" /> 
      <capability name="supportsDivNoWrap"    value="false" /> 
      <capability name="supportsFileUpload"    value="true" /> 
      <capability name="supportsMaintainScrollPositionOnPostback" value="true" /> 
      <capability name="supportsMultilineTextBoxDisplay" value="true" /> 
      <capability name="supportsXmlHttp"     value="true" /> 
      <capability name="tables"       value="true" /> 
     </capabilities> 
    </browser> 
</browsers> 

तब फिर से संकलन अपनी परियोजना (और शायद अपने सर्वर को पुनः आरंभ आप कर सकते हैं अगर) और फिर Presto, आप ASP.NET प्रमाणीकरण कुकी का अनुकरण कर सकते हैं!

+4

एएसपी.नेट में ब्राउज़र बकवास मुझे बीमार करता है, ब्राउज़र के लिए सामान तय न करें। यह ब्राउज़र पर कोड किए गए सबकुछ ठीक से काम करना चाहिए और ब्राउज़र उस पर चकित होने दें यदि वह ब्राउज़र बहुत बेवकूफ है, और मैंने ब्राउज़र क्लाइंट पक्ष में समस्याओं को ठीक करने के प्रयास को नहीं बिताया है। –

+0

मेरी इच्छा है कि मैं इसे एक से अधिक बार बढ़ा सकता हूं। बहुत बढ़िया। –

2

लगता like a bug और ऐसा लगता है कि fix in the trunk है।

+0

मैंने उस बग रिपोर्ट को देखा लेकिन यह जनवरी 2010 से और संस्करण 0.9.0 के लिए है। तब से कई रिलीज हुए हैं जिनमें वर्तमान संस्करण 0.10.0 सहित फिक्स शामिल है। इसके अलावा, मैंने उल्लेख किया है कि मैं स्पष्ट रूप से कुकी सेट कर सकता हूं, इसे किसी भी कारण से एएसपी.NET द्वारा स्वीकार नहीं किया जा रहा है। – cdmckay

+0

@cdmckay, क्या आपने सत्यापित किया कि ट्रंक पैच किया गया था? स्थिति कहती है * फिक्स्ड * लेकिन जिस समस्या का आप वर्णन कर रहे हैं उसे देखते हुए यह इस बग रिपोर्ट के अजीब तरह से दिखता है। –

+0

हां। मैंने '- कस्टम-हेडर कुकी भी कोशिश की .एएसपीएक्स = 91 सी0DE4 सी ... 'मामले में कामकाज। एक ही समस्या है। – cdmckay

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