InternetExplorer.Application объект и контейнер cookie - PullRequest
5 голосов
/ 02 февраля 2009

У меня есть следующее консольное приложение, написанное на 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 Ответ

2 голосов
/ 19 мая 2010

Относительно 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 информацию, в которой сравниваются два способа. все экземпляры вашего приложения будут иметь свой собственный набор файлов cookie, но только один набор файлов cookie для каждого процесса, независимо от количества элементов управления WebBrowser в вашем приложении.

Внутри любого процесса вы можете в любое время очистить cookie относительно следующего вызова

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

(см. http://support.microsoft.com/kb/195192/en), который еще раз показывает характер хранения файлов cookie.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...