web-dev-qa-db-fra.com

Comment effacer les données de session System.Windows.Forms.WebBrowser?

Comment effacer les données de la session en cours (cookies, données en cache, sessions d'authentification, etc.) sans redémarrer l'application?

Mise à jour: je parle du contrôle WebBrowser dans Windows.Forms, pas de la session ASP.Net.

24
user54045

Pour effacer la session (telle que les cookies HttpOnly), vous pouvez utiliser InternetSetOption () à partir de wininet.dll.

private const int INTERNET_OPTION_END_BROWSER_SESSION = 42;

[DllImport("wininet.dll", SetLastError = true)]
private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);

et utilisez cette méthode chaque fois que vous avez besoin de vider la session.

InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0);
webBrowser1.Document.Window.Navigate(url);
48
user227719

Si vous avez activé javascript, vous pouvez simplement utiliser cet extrait de code pour effacer les cookies du site sur lequel se trouve le navigateur Web (je n'ai pas encore trouvé le moyen de supprimer les cookies de session).

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.

En outre, vous pouvez supprimer le contenu du dossier "C:\Documents and Settings\nom d'utilisateur\Cookies" (moins le fichier index.dat, qui est généralement verrouillé).

En ce qui concerne les données mises en cache, il devrait suffire de supprimer tous les fichiers de "C:\Documents and Settings\nom d'utilisateur\Paramètres locaux\Fichiers Internet temporaires".

Si vous vraiment avez besoin de pouvoir effacer les cookies pour tous les sites, vous feriez probablement mieux d'utiliser quelque chose comme le contrôle axWebBrowser à long terme.

4
Jordan Milne

J'ai tout essayé pour effacer les données du formulaire afin que le prochain utilisateur ne voie pas l'adresse de messagerie précédente, etc. J'ai fini par effacer les cookies ...

string[] theCookies = System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.Cookies));
foreach (string currentFile in theCookies)
{
   try
   {
      System.IO.File.Delete(currentFile);
   }
   catch (Exception ex)
   {
   }
}
3
Travis

webBrowser1.Document.Cookies = "" ne fonctionnera pas. Cet appel ne supprimera pas le cookie. webBrowser1.Document.Cookies = ne fonctionne que comme document.cookie en javascript. Vous devriez trouver le cookie que vous souhaitez effacer, une 'Session', utilisez WebBrowser1.Document.Cookies = "Session = ''"; à '', comme vous voulez.

1
doyleconan
Private Const INTERNET_OPTION_END_BROWSER_SESSION As Integer = 42

    <DllImport("wininet.dll", SetLastError:=True)>
    Public Shared Function InternetSetOption(hInternet As IntPtr, dwOption As Integer, lpBuffer As IntPtr, lpdwBufferLength As Integer) As Boolean
    End Function

    Private Sub WebBrowserFormName_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Closed
        InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0)
    End Sub

Je poste juste pour quelqu'un qui cherche cette réponse en VB. Joyeux codage !!!

0
KleberBH

La solution suivante a fonctionné pour moi -

webBrowser1.Document.ExecCommand("ClearAuthenticationCache", false, null);

Ceci a été suggéré dans le post suivant pour supprimer les cookies - https://stackoverflow.com/a/21512662/6291511

Vous pouvez trouver plus d'informations à ce sujet ici - https://msdn.Microsoft.com/en-us/library/system.windows.forms.htmldocument.execcommand(v=vs.110).aspx

J'espère que ça aide!!!

0
Advait Purohit