Веб-браузер не может создавать файлы cookie? - PullRequest
0 голосов
/ 10 декабря 2010

Сценарий:

У меня есть веб-приложение (SnapshotServer), которое использует элемент управления WebBrowser для создания снимков веб-страницы.

Я использую элемент управления WebBrowser в SnapshotServer, чтобы перейти на страницу входа защищенного веб-приложения (ImageHost), а затем перенаправляет меня на нужную мне страницу. Приложение ImageHost защищено FormsAuthentication, которая использует куки. Страница входа, на которую я перехожу, заботится о том, чтобы зайти на меня, что создаст Auth cookie.

После генерирования ответа из ImageHost я преобразую результат в элементе управления WebBrowser в изображение.

Проблема:

Когда я запускаю SnapshotServer на моем ПК (Windows 7, IE8), используя IIS7, и перехожу на ImageHost на моем сервере разработки (Windows 2008 R2, IE8), результат по требованию - я вошел в ImageHost и перенаправлен на страницу, я хочу изображение. Когда я запускаю SnapshotServer на любом сервере Windows 2008 R2, используя IIS7, и перехожу к ImageHost на моем сервере разработки (Windows 2008 R2, IE8), результат не такой, как требуется - ImageHost не может войти в систему - поэтому мое изображение соответствует имени входа стр. Причина, по которой он не может войти в систему, заключается в том, что он не создает файл cookie Auth.

Так что я хотел бы знать, может ли кто-нибудь сказать мне, почему элемент управления WebBrowser при запуске с сервера Windows 2008 не может создавать файлы cookie.

1 Ответ

3 голосов
/ 10 декабря 2010

Прежде всего, это не имеет никакого отношения к вашей версии Windows, вашей версии IIS или даже вашей версии IE.

Это может быть связано с некоторой проблемой безопасности в вашем IE в Windows 2008. Проверьте параметры Интернета и включите файлы cookie (если он отключен, я думаю, что нет).

Также вы можете заставить свой элемент управления WebBrowser использовать контейнер cookie следующим образом:

public partial class WebBrowserControl : Form
{
     private String url;

     [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
     public static extern bool InternetSetCookie(string lpszUrlName, string    lbszCookieName, string lpszCookieData);

     public WebBrowserControl(String path)
     {
          this.url = path;
          InitializeComponent();

          // set cookie
          InternetSetCookie(url, "JSESSIONID", Globals.ThisDocument.sessionID); 

          // navigate
          webBrowser.Navigate(url); 
     }
}

Это должно решить вашу проблему

...