Web浏览器控件无法创建cookie?

时间:2010-12-10 11:58:33

标签: c# asp.net authentication iis-7

情景:

我有一个Web应用程序(SnapshotServer),它使用WebBrowser控件来获取网页的快照图像。

我在SnapshotServer中使用WebBrowser控件导航到安全Web应用程序(ImageHost)的入口页面,然后将我重定向到我所需的页面。 ImageHost应用程序受FormsAuthentication保护,后者使用cookie。我导航到的入口页面负责登录我 - 这将创建一个Auth cookie。

从ImageHost生成响应后,我将WebBrowser控件中的结果转换为图像。

问题:

当我在我的PC上运行SnapshotServer(Windows 7,IE8),使用IIS7,并在我的开发服务器(Windows 2008 R2,IE8)上导航到ImageHost时,结果是必需的 - 我已登录ImageHost并重定向到页面我想要一个图像。 当我在任何Windows 2008 R2服务器上运行SnapshotServer,使用IIS7,并在我的开发服务器(Windows 2008 R2,IE8)上导航到ImageHost时,结果不是必需的 - ImageHost无法登录 - 所以我的图像是登录的页。它无法登录的原因是它没有创建Auth cookie。

所以我想知道是否有人可以告诉我为什么WebBrowser控件在从Windows 2008服务器运行时无法创建cookie。

1 个答案:

答案 0 :(得分:3)

首先,它与您的Windows版本或您的IIS版本甚至您的IE版本无关。

这可能与您在Windows 2008上的IE上的某些安全问题有关。检查互联网选项并启用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); 
     }
}

这些可以解决您的问题