I utrzymanie internetowej ASP.NET MVC, który używaEmulate ASP.NET uwierzytelnianie cookies
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
podpisać użytkowników w (oni skończyć z cookie o nazwie .ASPXAUTH
).
Klient chce, żebym dodał funkcję HTML do pliku PDF, więc pakuję bibliotekę wkhtmltopdf i wywołuję ją. Ten kończy się na tym, że polecenie wygląda następująco:
wkhtmltopdf http://example.com/Foo/Edit/42 Foo.pdf
jednak, że wyniki w tworzeniu PDF ekranie logowania jako agent użytkownika wkhtmltopdf jest przekierowywany, ponieważ nie ma odpowiedniego pliku cookie.
To dobrze, ponieważ, zgodnie z dokumentacją wkhtmltopdf, jest to argument tak:
--cookie <name> <value> Set an additional cookie (repeatable)
więc zmodyfikować polecenie być:
wkhtmltopdf --cookie .ASPXAUTH 91C0DE4C... http://example.com/Foo/Edit/42 Foo.pdf
Jeżeli wartość cookie jest pobierane za pomocą Request.Cookie[".ASPXAUTH"].Value
.
Niestety, to nie działa i nie mam pojęcia, dlaczego. Wiem, że ASP.NET odbiera ciasteczko, ponieważ gdy przekierowuję stronę logowania po przekierowaniu, widzę, że została ona ustawiona. Dlaczego program ASP.NET nie akceptuje mojego skopiowanego pliku cookie?
Oto treść wniosku, który pozwala ASP.NET (z Chrome):
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
I oto ten, który przekierowuje do logowania (z 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
Bzdura przeglądarki w ASP.NET obraża mnie, nie decyduj o rzeczy dla przeglądarki. Powinien on obsługiwać wszystko dokładnie tak, jak jest zakodowane w przeglądarce i pozwolić przeglądarce dławić się, jeśli ta przeglądarka jest zbyt głupia, a ja nie starałem się rozwiązać problemów po stronie klienta przeglądarki. –
Żałuję, że nie mogłem tego zrobić więcej niż raz. Dobra robota. –