InternetExplorer.Application对象和cookie容器

时间:2009-02-02 12:27:25

标签: internet-explorer cookies automation

我有以下用VB.NET编写的控制台应用程序:

Sub Main()
    Dim ie As Object = CreateObject("InternetExplorer.Application")
    ie.Visible = True
    ie.Navigate2("http://localhost:4631/Default.aspx")
End Sub

该程序使用InternetExplorer.Application自动化对象启动IE窗口并导航给定的URL。我遇到的问题是,即使我启动了我的应用程序的多个实例,使用此方法创建的IE窗口都共享相同的cookie容器。是否有任何参数可以指定为每个窗口创建不同的cookie容器?

这是我用来测试Cookie的网页:

<%@ Page Language="C#" AutoEventWireup="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        // Store something into the session in order to create the cookie
        Session["foo"] "bar";
        Response.Write(Session.SessionID);
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
    <form id="form1" runat="server"></form>
</body>
</html>

1 个答案:

答案 0 :(得分:2)

关于CreateObject("InternetExplorer.Application"),您可以创建一个Internet Explorer实例,并且您程序的所有实例都通过这一个进程进行通信。 每个流程都会保留Cookie

您可以尝试在应用WebBrowser控件中使用(请参阅http://msdn.microsoft.com/en-us/library/3s8ys666.aspx)。您可以在http://msdn.microsoft.com/en-us/library/aa752044(VS.85).aspx中找到比较两种方式的信息。如果您在应用程序中使用WebBrowser控件,则应用程序的所有实例都将拥有自己的一组cookie,但每个进程只有一组cookie,与应用程序中WebBrowser控件的数量无关。 / p>

在任何流程的内部,您可以随时清除关于以下呼叫的cookie

InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0);

(参见http://support.microsoft.com/kb/195192/en)再次显示了Cookie的性质。