2009-02-02 6 views
4

J'ai l'application console suivante écrite en VB.NET:objet InternetExplorer.Application et biscuit contenant

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

Ce programme utilise l'objet d'automatisation InternetExplorer.Application pour lancer une fenêtre Internet Explorer et naviguer dans une URL donnée. Le problème que j'ai rencontré est que même si je lance plusieurs instances de mon application, les fenêtres IE qui sont créées avec cette méthode partagent toutes le même conteneur de cookies. Y at-il un paramètre que je pourrais utiliser en spécifiant qu'un conteneur de cookies différent est créé pour chaque fenêtre?

Ceci est la page web j'ai utilisé pour tester les cookies:

<%@ 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> 

Répondre

2

En ce qui concerne de CreateObject("InternetExplorer.Application") vous créez une instance d'Internet Explorer et toutes les instances de la programmation de communiquer à travers celui-processus. Les cookies seront conservés par processus.

Vous pouvez essayer d'utiliser dans votre application WebBrowser contrôle à la place (voir http://msdn.microsoft.com/en-us/library/3s8ys666.aspx). Vous trouverez dans http://msdn.microsoft.com/en-us/library/aa752044(VS.85).aspx des informations qui comparent deux façons. Si vous utilisez WebBrowser contrôle dans votre application, toutes les instances de votre application auront son propre ensemble de cookies, mais seulement un ensemble de cookies par processus indépendant du nombre de contrôles WebBrowser dans votre application.

A l'intérieur de tout processus, vous pouvez tout moment effacer le cookie à l'égard de suivre l'appel

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

(voir http://support.microsoft.com/kb/195192/en) qui montre une fois de plus la nature des cookies holding.