Comment définir et supprimer les cookies de WebBrowser Control pour des domaines arbitraires

Comment puis-je définir et supprimer des cookies pour un domaine dans le contrôle Webbrowser sans utiliser Javascript

Réussi à accomplir cette tâche en combinant ces 2:

http://support.microsoft.com/kb/815718

INTERNET_OPTION_END_BROWSER_SESSION – http://msdn.microsoft.com/en-us/library/windows/desktop/aa385328(v=vs.85).aspx

J’espère que cela t’aides

using System.Runtime.InteropServices; namespace Storm8 { class Program { [DllImport("wininet.dll", SetLastError = true)] private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength); [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool InternetGetCookie( ssortingng lpszUrlName, ssortingng lpszCookieName, SsortingngBuilder lpszCookieData, [MarshalAs(UnmanagedType.U4)] ref int lpdwSize ); [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool InternetSetCookie( ssortingng lpszUrlName, ssortingng lpszCookieName, ssortingng lpszCookieData ); [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool InternetSetOption( int hInternet, int dwOption, ssortingng lpBuffer, int dwBufferLength ); [STAThread] static void Main(ssortingng[] args) { InternetSetOption(0, 42, null, 0); InternetSetCookie("http://domain.name.com", "cookiename", "cookievalue"); WebBrowser wb = new WebBrowser(); ssortingng testUrl = "http://domain.name.com/fight.php?showAttackBg=true"; ssortingng additionalHeaders = "User-Agent: Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit /528.18 (KHTML, like Gecko) Mobile/7A341" + Environment.NewLine + "Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5" + Environment.NewLine + "Accept-Language: en-gb"; if (wb.Document == null) wb.Navigate(testUrl, null, null, additionalHeaders); while (wb.Document == null) Application.DoEvents(); Console.WriteLine("\nPress any key to continue..."); Console.ReadKey(true); } } } 

Référence

Internet Explorer utilise les fonctions WinInet pour la mise en réseau afin que vous puissiez utiliser les fonctions de cookie de WinInet pour modifier le cookie. Mise à jour: l’exigence exige un paramétrage par processus. Étant donné que l’emplacement du dossier de cache n’est pas stocké dans la clé de registre de parameters IE, IDocHostUIHandler2 :: GetOverrideKeyPath ne fonctionnera pas. Je ne connais pas de moyen de personnaliser l’emplacement du dossier de cookie au niveau du processus, sauf de connecter toutes les API WinInet (et de bloquer l’application de mise à jour afin de prendre en charge les futures API WinInet).

Voici un article de blog sur la manière de supprimer les cookies dans le contrôle WebBrowser à l’aide de wininet.

http://www.alphatecit.com.au/code-snippets/facebook-c-sdk-multiple-login-problem-resolved/

Voici une solution plus fine qui n’efface que les cookies (C / C ++):

 #include  #include  ... DWORD dwSuppress = INTERNET_SUPPRESS_COOKIE_PERSIST; InternetSetOption(0, INTERNET_OPTION_SUPPRESS_BEHAVIOR, &dwSuppress, sizeof(DWORD)); 

Tous les crédits de cet article de blog (C #). N’oubliez pas de consulter la documentation pour InternetSetOption et INTERNET_SUPPRESS_COOKIE_PERSIST

Vous ne pouvez pas supprimer les cookies pour un domaine autre que le domaine du site actuel.

Pour faire ce que vous demandez, vous devez avoir access à la machine (barre d’outils installée). Même alors c’est kludgy.

La seule exception concerne les domaines où le cookie utilise le caractère générique *, par exemple * .stackoverflow.com. Si vous modifiez un cookie avec le caractère générique, tous les sous-domaines enfants (par exemple, blog.stackoverflow.com) auront access et verront les modifications apscopes au cookie.