25 Stimmen

Wie löscht man System.Windows.Forms.WebBrowser Sitzungsdaten?

Wie kann ich aktuelle Sitzungsdaten (Cookies, zwischengespeicherte Daten, Autorisierungssitzungen usw.) löschen, ohne die Anwendung neu zu starten?

Update: Ich spreche vom WebBrowser-Steuerelement in Windows.Forms, nicht von der ASP.Net-Sitzung.

1voto

Advait Purohit Punkte 11

Folgende Lösung hat bei mir funktioniert -

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

Dies wurde im folgenden Beitrag zum Löschen von Cookies vorgeschlagen - https://stackoverflow.com/a/21512662/6291511

Mehr Informationen dazu finden Sie hier - https://msdn.microsoft.com/en-us/library/system.Windows.forms.htmldocument.execcommand(v=vs.110).aspx

Hoffentlich hilft es!!!

0voto

Ilya Tchivilev Punkte 812

Sie müssen sich darüber im Klaren sein, dass der "Sitzungsstatus" vom Standpunkt eines Webservers aus verfolgt wird, indem dem Client-Browser ein Cookie mit einer Sitzungskennung übergeben wird. Wenn der Browser eine Nachricht an den Server sendet, kann der Server anhand dieses Cookies die Anfrage mit einem gespeicherten Sitzungsstatus in Verbindung bringen.

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

ASP.NET verfügt auch über so genannte "cookieless sessions", bei denen die Sitzungs-ID zur URL hinzugefügt wird. Wenn das also der vom Server verwendete Mechanismus ist, könnten Sie versuchen, dies aus der URL herauszufiltern. Aber Sie werden nicht viel sehen, es ist hauptsächlich der Cookie-basierte Sitzungsstatus.

-6voto

Passing Punkte 1

Windows 7 verwendet index.dat-Dateien, um Cookies und den Verlauf zu speichern, damit Bill und seine Freunde in der CIA-Zentrale Sie ausspionieren können, und sie haben alles getan, um sicherzustellen, dass Sie diese Dateien nicht löschen können und dass nach dem Erstellen von Kopien, weil "Spezialordner" verwendet werden und die .dat-Dateien gesperrt bleiben, während Windows läuft.

Dies ist keine perfekte Lösung, aber sie funktioniert bis zu einem gewissen Grad, wenn die vollständigen Dateinamen in einer Liste enthalten sind.

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 { }
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X