Je travaille avec le contrôle Webbrowser sur une application Windows.form écrite en C #. J'aimerais écrire une méthode pour supprimer les cookies du contrôle Webbrowers après avoir visité un site donné. Malheureusement, je ne sais pas comment faire cela exactement et je n'ai pas trouvé beaucoup d'aide sur Internet.
Si quelqu'un a de l'expérience dans ce domaine, pas seulement hypothétique, car cela pourrait être plus compliqué qu'il n'y paraît, je ne sais pas.
int count = webBrowser2.Document.Cookie.Length;
webBrowser2.Document.Cookie.Remove(0,count);
Je supposerais simplement que quelque chose comme le code ci-dessus fonctionnerait, mais je suppose que cela ne fonctionnera pas. Quelqu'un peut-il nous éclairer sur cette histoire de biscuits?
Si JavaScript est activé, vous pouvez simplement utiliser cet extrait de code pour supprimer les cookies du site sur lequel se trouve le navigateur Web.
webBrowser.Navigate("javascript:void((function(){var a,b,c,e,f;f=0;a=document.cookie.split('; ');for(e=0;e<a.length&&a[e];e++){f++;for(b='.'+location.Host;b;b=b.replace(/^(?:%5C.|[^%5C.]+)/,'')){for(c=location.pathname;c;c=c.replace(/.$/,'')){document.cookie=(a[e]+'; domain='+b+'; path='+c+'; expires='+new Date((new Date()).getTime()-1e11).toGMTString());}}}})())")
Il est dérivé de ce bookmarklet pour supprimer les cookies.
J'ai modifié la solution à partir d'ici: http://mdb-blog.blogspot.ru/2013/02/c-winforms-webbrowser-clear-all-cookies.html
En fait, vous n'avez pas besoin d'un code dangereux. Voici la classe d'assistance qui fonctionne pour moi:
public static class WinInetHelper
{
public static bool SupressCookiePersist()
{
// 3 = INTERNET_SUPPRESS_COOKIE_PERSIST
// 81 = INTERNET_OPTION_SUPPRESS_BEHAVIOR
return SetOption(81, 3);
}
public static bool EndBrowserSession()
{
// 42 = INTERNET_OPTION_END_BROWSER_SESSION
return SetOption(42, null);
}
static bool SetOption(int settingCode, int? option)
{
IntPtr optionPtr = IntPtr.Zero;
int size = 0;
if (option.HasValue)
{
size = sizeof (int);
optionPtr = Marshal.AllocCoTaskMem(size);
Marshal.WriteInt32(optionPtr, option.Value);
}
bool success = InternetSetOption(0, settingCode, optionPtr, size);
if (optionPtr != IntPtr.Zero) Marshal.Release(optionPtr);
return success;
}
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool InternetSetOption(
int hInternet,
int dwOption,
IntPtr lpBuffer,
int dwBufferLength
);
}
Vous appelez SupressCookiePersist quelque part au début du processus et EndBrowserSession pour effacer les cookies lorsque le navigateur est fermé, comme décrit ici: Compte multiple Facebook
J'ai trouvé une solution, pour supprimer tous les cookies . L'exemple trouvé sur l'URL, supprime les cookies au démarrage de l'application (processus).
http://mdb-blog.blogspot.com/2013/02/c-winforms-webbrowser-clear-all-cookies.html
La solution utilise InternetSetOption Fonction permettant d’annoncer à WEBBROWSER d’effacer tout son contenu.
int option = (int)3/* INTERNET_SUPPRESS_COOKIE_PERSIST*/;
int* optionPtr = &option;
bool success = InternetSetOption(0, 81/*INTERNET_OPTION_SUPPRESS_BEHAVIOR*/, new IntPtr(optionPtr), sizeof(int));
if (!success)
{
MessageBox.Show("Something went wrong !>?");
}
Notez que cela efface les cookies pour le PROCESS spécifique uniquement tels qu’ils sont écrits sur MSDN INTERNET_OPTION_SUPPRESS_BEHAVIOR :
Option à usage général utilisée pour supprimer les comportements sur un base de processus.
Une variante des autres réponses proposées, ne nécessitant pas de code non sécurisé ni de tri manuel:
private static void SuppressCookiePersistence()
{
int flag = INTERNET_SUPPRESS_COOKIE_PERSIST;
if (!InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SUPPRESS_BEHAVIOR, ref flag, sizeof(int)))
{
var ex = Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error());
throw ex;
}
}
const int INTERNET_OPTION_SUPPRESS_BEHAVIOR = 81;
const int INTERNET_SUPPRESS_COOKIE_PERSIST = 3;
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, ref int flag, int dwBufferLength);
Essayez d'utiliser ceci:
System.IO.File.Delete(Environment.SpecialFolder.Cookies.ToString() + "cookiename");
contrôle du navigateur Web basé sur Internet Explorer, donc lorsque nous supprimons les cookies IE, les cookies du navigateur Web sont également supprimés donc par ceci répondez vous pouvez essayer ceci:
System.Diagnostics.Process.Start("CMD.exe","/C RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2");
webBrowser.Navigate("javascript:void((function(){var a,b,c,e,f;f=0;a=document.cookie.split('; ');for(e=0;e<a.length&&a[e];e++){f++;for(b='.'+location.Host;b;b=b.replace(/^(?:%5C.|[^%5C.]+)/,'')){for(c=location.pathname;c;c=c.replace(/.$/,'')){document.cookie=(a[e]+'; domain='+b+'; path='+c+'; expires='+new Date((new Date()).getTime()-1e11).toGMTString());}}}})())")
Le contrôle navigateur Web affiche-t-il des pages sur plusieurs sites que vous ne maîtrisez pas en tant que développeur ou utilisez-vous simplement le contrôle du navigateur Web pour afficher les pages HTML personnalisées créées dans votre application?
Si c’est le cas, les cookies sont directement liés au domaine qui les définit. Pour supprimer ces cookies, vous devez surveiller le répertoire des cookies des utilisateurs et supprimer tous les nouveaux cookies créés, afin de suivre les modifications apportées aux cookies existants.
Si c'est le dernier cas, vous pouvez toujours envoyer le contrôle navigateur Web à une page personnalisée qui supprime les cookies à l'aide d'un script côté serveur (si disponible dans votre application) ou de JavaScript.
Après un bon moment à trouver comment détruire les sessions dans le navigateur Web C #, je réussis avec un code:
webBrowser.Navigate("javascript:void((function(){var a,b,c,e,f;f=0;a=document.cookie.split('; ');for(e=0;e<a.length&&a[e];e++){f++;for(b='.'+location.Host;b;b=b.replace(/^(?:%5C.|[^%5C.]+)/,'')){for(c=location.pathname;c;c=c.replace(/.$/,'')){document.cookie=(a[e]+'; domain='+b+'; path='+c+'; expires='+new Date((new Date()).getTime()-1e11).toGMTString());}}}})())")
comment dit Jordan Milne dans ce sujet ci-dessus.
Dans mon application, j'ai besoin d'utiliser webbrowser1.navigate ("xxx");
ici ne fonctionne pas si vous utilisez les propriétés C #.
j'espère que vous trouverez utile cette information.
J'utilise ce code et cela fonctionne sans JavaScript. Il fait la même chose que le JavaScript, mais en VB.NET. En outre, aucune navigation nécessaire.
For Each cookie As String In Document.Cookie.Split(";"c)
Dim domain As String = "." + url.Host
While domain.Length > 0
Dim path As String = url.LocalPath
While path.Length > 0
Document.Cookie = cookie.Split("="c)(0).Trim & "= ;expires=Thu, 30-Oct-1980 16:00:00 GMT;path=" & path & ";domain=" & domain
path = path.Substring(0, path.Length - 1)
End While
Select Case domain.IndexOf(".")
Case 0
domain = domain.Substring(1)
Case -1
domain = ""
Case Else
domain = domain.Substring(domain.IndexOf("."))
End Select
End While
Next
La seule différence réelle par rapport au JavaScript réside dans le fait que, au lieu d’expirer simplement cookie=value
, je recherche spécifiquement le =
et expire cookie=
. Ceci est important pour les cookies expirants qui n'ont aucune valeur.
Pièges:
Document
jusqu'au ReadyState = WebBrowserReadyState.Complete
, sinon le document sera Nothing et la déréférence lève une exception.Firefox avec le module complémentaire View Cookies a beaucoup aidé à déboguer des pages Web spécifiques.