tôi duy trì một trang web ASP.NET MVC sử dụngEmulate ASP.NET xác thực Cookie
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
ký người dùng trong (họ kết thúc với một cookie được đặt tên .ASPXAUTH
).
Khách hàng muốn tôi thêm tính năng HTML sang PDF, vì vậy tôi đang gói thư viện wkhtmltopdf và gọi đó. Điều này kết thúc lên được một lệnh đó trông như thế này:
wkhtmltopdf http://example.com/Foo/Edit/42 Foo.pdf
Tuy nhiên, các kết quả trong việc đưa ra một PDF của màn hình đăng nhập, như user agent wkhtmltopdf được chuyển hướng vì nó không có cookie chính xác.
Đó là mỹ từ đó, theo các tài liệu wkhtmltopdf, có một cuộc tranh cãi như thế này:
--cookie <name> <value> Set an additional cookie (repeatable)
Vì vậy, tôi sửa đổi lệnh là:
wkhtmltopdf --cookie .ASPXAUTH 91C0DE4C... http://example.com/Foo/Edit/42 Foo.pdf
Trường hợp giá trị cookie được lấy ra sử dụng Request.Cookie[".ASPXAUTH"].Value
.
Thật không may, điều này dường như không hoạt động và tôi không biết tại sao. Tôi biết rằng ASP.NET đang nhận được cookie vì khi tôi phá vỡ trang đăng nhập sau khi chuyển hướng, tôi có thể thấy rằng nó đã được thiết lập. Vậy tại sao ASP.NET không chấp nhận cookie đã sao chép của tôi?
Dưới đây là nội dung của một yêu cầu rằng ASP.NET cho phép (từ 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
Và đây cũng là loại nó chuyển hướng để đăng nhập (từ 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
Crap trình duyệt trong ASP.NET làm tôi khó chịu, không quyết định nội dung cho trình duyệt. Nó sẽ phục vụ mọi thứ chính xác như được mã hóa cho trình duyệt và để cho trình duyệt nghẹt thở nếu trình duyệt đó quá ngu ngốc, và tôi đã không dành công sức để khắc phục sự cố ở phía trình duyệt của khách hàng. –
Tôi ước rằng tôi có thể upvote điều này nhiều hơn một lần. Làm tốt. –