2009-01-12 5 views

Antwort

-1

Sie müssen feststellen, dass der Weg "Sitzungsstatus" aus der Sicht eines Webservers verfolgt wird, indem Sie dem Client-Browser einen Cookie mit einer Sitzungs-ID geben. Wenn der Browser zurück zum Server sendet, ermöglicht dieser Cookie dem Server, die Anfrage einem gespeicherten Sitzungszustand zuzuordnen.

Die Lösung besteht also darin, die Cookies des webBrowser-Steuerelements zu löschen. ZB webBrowser1.Document.Cookies = "", das sollte funktionieren, denke ich.

ASP.NET hat auch, was es "cookieless Sitzungen" nennt, die funktionieren, indem die Sitzungs-ID der URL hinzufügt. Wenn dies der vom Server verwendete Mechanismus ist, könnten Sie versuchen, das aus der URL herauszufiltern. Aber Sie werden nicht viel sehen, es ist vor allem der Cookie-basierte Sitzungszustand.

1

webBrowser1.Document.Cookies = "" wird nicht funktionieren. Dieser Anruf löscht den Cookie nicht. webBrowser1.Document.Cookies = funktioniert nur als document.cookie in Javascript. Sie sollten den Cookie finden, den Sie löschen möchten, sa 'Session', verwenden Sie webBrowser1.Document.Cookies = "Session = ''"; Es wird einfach den Cookie auf '' setzen, wie Sie möchten.

4

Wenn Sie JavaScript aktiviert haben, können Sie dieses Code-Snippet verwenden, um die Cookies für die Website zu löschen, auf der sich der Webbrowser gerade befindet (Ich habe noch keine Möglichkeit gefunden, andere Session-Cookies zu löschen).

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

Es ist abgeleitet von this bookmarklet für die Cookies zu löschen.

Zusätzlich können Sie den Inhalt des Ordners "C: \ Dokumente und Einstellungen \ Benutzername \ Cookies" (abzüglich der index.dat, die normalerweise gesperrt ist) löschen.

Wie für die zwischengespeicherten Daten sollte es ausreichen, nur alle Dateien in `` C: \ Dokumente und Einstellungen \ Benutzername \ Lokale Einstellungen \ Temporary Internet Files '' zu löschen.

Wenn Sie wirklich müssen in der Lage sein, die Cookies für alle Websites zu löschen, sind Sie wahrscheinlich besser dran mit etwas wie der axWebBrowser Steuerelement auf lange Sicht.

45

Zum Löschen der Sitzung (z. B. HttpOnly-Cookies) können Sie InternetSetOption() von wininet.dll verwenden.

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); 

und verwenden Sie diese Methode, wenn Sie die Sitzung löschen müssen.

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

Dies ist die richtige Antwort. – EricLaw

+1

Ich habe eine Reihe von Funktionstests mit dem Browser-Steuerelement ausgeführt und hatte genau dieses Problem. Diese Lösung hat mein Problem gelöst. – Zoidberg

3

ich alles versucht, um die Formulardaten zu löschen, so dass die nächsten Benutzer die vorherige E-Mail-Adresse sehen würden, usw. beenden ich die Cookies tue dies zu klären ...

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 verwendet index.dat-Dateien zum Speichern von Cookies und Verlauf, damit Bill und seine Freunde bei CIA central Sie ausspionieren können und alles getan haben, um sicherzustellen, dass Sie diese Dateien nicht löschen können, nachdem Sie Kopien erstellt haben, weil 'Spezielle Ordner' verwendet werden Die .Dat-Dateien bleiben während der Ausführung von Windows gesperrt.

Dies ist keine perfekte Lösung, aber es funktioniert zu einem gewissen Grad mit den vollständigen Dateinamen in einer Liste.

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 

Nur für jemanden auf der Suche nach dieser Antwort in VB. Glückliche Codierung !!!