2009-01-12 7 views

Respuesta

-1

Debe tener en cuenta que el seguimiento del "estado de la sesión", desde el punto de vista de un servidor web, consiste en proporcionar al navegador del cliente una cookie con una identificación de sesión. Cuando el navegador publica mensajes en el servidor, esa cookie permite que el servidor asocie la solicitud con un estado de sesión almacenado.

Así que la solución es borrar las cookies del control webBrowser. Ej webBrowser1.Document.Cookies = "", eso debería funcionar, creo.

ASP.NET también tiene lo que llama "sesiones sin cookies", que funcionan mediante la adición de la identificación de la sesión a la url. Entonces, si ese es el mecanismo utilizado por el servidor, podría intentar filtrarlo fuera de la url. Pero no verá mucho, es principalmente el estado de la sesión basada en cookies.

1

webBrowser1.Document.Cookies = "" no funcionará. Esta llamada no borrará la cookie. webBrowser1.Document.Cookies = solo funciona como document.cookie en javascript. Debería encontrar la cookie que desea borrar, sa 'Session', use webBrowser1.Document.Cookies = "Session = ''"; Simplemente establecerá la cookie en '', como desee.

4

Si tiene Javascript habilitado, puede usar este fragmento de código para borrar las cookies del sitio en el que se encuentra actualmente el navegador web (todavía no he encontrado una manera de borrar las cookies de sesión que no sean).

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());}}}})())") 

Se deriva de this bookmarklet para la limpieza de cookies.

Además de esto, puede eliminar el contenido de la carpeta `` C: \ Documents and Settings \ username \ Cookies '' (menos el index.dat, que generalmente está bloqueado).

En cuanto a los datos en caché, debería bastar con eliminar todos los archivos en `` C: \ Documents and Settings \ username \ Local Settings \ Temporary Internet Files ''.

Si realmente necesita poder borrar las cookies para todos los sitios, probablemente sea mejor que use algo como el control axWebBrowser a la larga.

45

Para borrar la sesión (como las cookies HttpOnly), puede utilizar InternetSetOption() 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); 

y utilice este método cada vez que necesite borrar la sesión.

InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0); 
webBrowser1.Document.Window.Navigate(url); 
+3

Esta es la respuesta correcta. – EricLaw

+1

Estaba ejecutando un conjunto de pruebas funcionales usando el control del navegador y tuve este mismo problema. Esta solución resolvió mi problema. – Zoidberg

3

He intentado todo para borrar los datos del formulario por lo que el siguiente usuario no vería la dirección de correo electrónico anterior, etc. Terminé haciendo esto para borrar las 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) 
    { 
    } 
} 
-6

Windows 7 utiliza archivos index.dat para almacenar cookies e historial para que Bill y sus amigos de la central de la CIA puedan husmear y hayan hecho todo lo posible para asegurarse de que no pueden eliminar estos archivos y luego de tomar copias porque se usan "Carpetas especiales" y los archivos .Dat permanecen bloqueados mientras se está ejecutando Windows.

Esta no es una solución perfecta pero funciona hasta cierto punto con los nombres completos de los archivos en una lista.

int DeletedCount = 0; 
     int CouldNotDelete = 0; 
     KillExplorer(); 
     foreach (string DatFile in DatFiles) 
     {//Do not put break point or step into the code else explorer will start and the file will become locked again 
      DirectoryInfo DInfo=new DirectoryInfo(DatFile.Replace("index.dat","")); 
      FileAttributes OldDirAttrib = DInfo.Attributes; 
      DInfo.Attributes = FileAttributes.Normal;//Set to normal else can not delete 
      FileInfo FInfo = new FileInfo(DatFile); 
      FileAttributes OldFileAttrib = FInfo.Attributes; 
      SetAttr(FInfo, FileAttributes.Normal); 
      TryDelete(FInfo); 
      SetAttr(FInfo, OldFileAttrib);//Sets back to Hidden,system,directory,notcontentindexed 
      if (File.Exists(DatFile)) 
       CouldNotDelete++; 
      else 
       DeletedCount++; 

     } 
     if (DatFiles.Count>0)//Lets get explorer running again 
      System.Diagnostics.Process.Start(DatFiles[DatFiles.Count - 1].Replace("index.dat", "")); 
     else 
      System.Diagnostics.Process.Start("explorer"); 
     System.Windows.Forms.MessageBox.Show("Deleted " + DeletedCount + " Index.dat files with " + CouldNotDelete + " Errors"); 


     return "Deleted " + DeleteFileCount + " Files "; 
    } 

    private void KillExplorer() 
    { 
     foreach (Process P in Process.GetProcesses()) 
     {//Kill both these process because these are the ones locking the files 
      if (P.ProcessName.ToLower() == "explorer") 
       P.Kill(); 
      if (P.ProcessName.ToLower() == "iexplore") 
       P.Kill(); 
     } 
    } 

    private bool TryDelete(FileInfo Info) 
    { 
     try 
     { 
      Info.Delete(); 
      return true; 
     } 
     catch 
     {return false;} 
    } 

    private void SetAttr(FileInfo Info,FileAttributes Attr) 
    { 
     try 
     { 
      Info.Attributes = Attr; 
     } 
     catch { } 
    } 
0
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 

Solo publicando para alguien que busque esta respuesta en VB. Happy coding !!!

Cuestiones relacionadas