2009-11-06 6 views
10

Wie kann ich Cookies für eine Domain in der Webbrowser-Steuerung ohne Javascript () setzen und löschen, ohne Cookies zu setzen/löschen, ohne zuerst zur Website zu navigieren.)So setzen und löschen Sie Cookies von WebBrowser Control für beliebige Domänen

+0

Was ist Ihre Anforderung/Szenario dafür? "Von der Webbrowser-Steuerung" ist möglicherweise nicht erforderlich. Haben Sie die Kontrolle über die Website? Wenn Sie dies tun, können Sie Cookies aus der HttpRequest hinzufügen und entfernen, und diese API ermöglicht es Ihnen, die Cookie-Domäne anzugeben. –

+0

Ich habe einen Browser und ich möchte die Möglichkeit hinzufügen, alle Cookies für eine bestimmte Website zu ändern. –

Antwort

3

Managed diese Aufgabe zu erfüllen, indem sie diese 2 kombiniert:

http://support.microsoft.com/kb/815718

und INTERNET_OPTION_END_BROW SER_SESSION - http://msdn.microsoft.com/en-us/library/windows/desktop/aa385328(v=vs.85).aspx

+2

Ich habe die URLs durchsucht, aber ich habe keine Lösung gefunden. Kannst du mir bitte die kurze Lösung geben? Ich wurde mit dem gleichen Problem von den letzten 10 Tagen geschlagen – Avinash

+1

@ dr.evil Können Sie bitte eine Zusammenfassung über das, was Sie getan haben, um dies zu lösen? ... Link nur Antworten sind nicht so gut in SO. – Lijo

-3

Sie können keine Cookies für eine andere Domain als die Domain der aktuellen Site löschen.

Um zu tun, was Sie fragen, müssen Sie Zugriff auf die Maschine (d. H. Symbolleiste installiert). Selbst dann ist es klatschig.

Die einzige Ausnahme besteht, wenn Sie sich in einer Domäne befinden, in der der Cookie den * Platzhalter verwendet, z. B. * .stackoverflow.com. Wenn Sie einen Cookie mit dem Platzhalter ändern, haben alle untergeordneten Unterdomänen (d. H. Blog.stackoverflow.com) Zugriff und sehen die Änderung, die an dem Cookie vorgenommen wurde.

+0

Von "Webbrowser-Steuerelement" ist dies keine Webanwendung, es ist Winforms. –

0

IE Verwendet WinInet-Funktionen für die Vernetzung, so dass Sie WinInet's cookie functions verwenden können, um den Cookie zu ändern. Update: Die Anforderung erfordert pro Prozesseinstellung. Da der Speicherort des Cache-Ordners nicht im Registrierungsschlüssel für die IE-Einstellungen gespeichert ist, funktioniert IDocHostUIHandler2 :: GetOverrideKeyPath nicht. Ich kenne keine Möglichkeit, den Speicherort des Cookie-Ordners auf der Prozessebene anzupassen, außer dass alle WinInet-APIs angehängt werden (und bei der Aktualisierung der Anwendung bleiben, um sie an zukünftige WinInet-APIs anzupassen).

+1

Ist das nicht für den ganzen IE? Ich möchte die Browser-Cookies der Benutzer nicht für IE löschen, sondern nur für die gehostete Web-Steuerung der aktuellen Anwendung. Korrigiere mich, wenn ich falsch liege. –

+0

Wenn Sie die Cookies Ihrer Anwendung isolieren möchten, müssen Sie die Cache-Verzeichnisregistrierungseinstellung über IDocHostUIHandler2 :: GetOverrideKeyPath überschreiben –

+0

Ich bin nicht sicher, dass der GetOverrideKeyPath-Trick sogar funktionieren würde. Sie sollten InternetSetCookieEx in beide Richtungen verwenden. – EricLaw

1

this helps

using System.Runtime.InteropServices; 

namespace Storm8 
{ 
    class Program 
    { 

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

     [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] 
     private static extern bool InternetGetCookie(
      string lpszUrlName, 
      string lpszCookieName, 
      StringBuilder lpszCookieData, 
      [MarshalAs(UnmanagedType.U4)] 
      ref int lpdwSize 
     ); 

     [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] 
     private static extern bool InternetSetCookie(
      string lpszUrlName, 
      string lpszCookieName, 
      string lpszCookieData 
     ); 

     [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] 
     private static extern bool InternetSetOption(
      int hInternet, 
      int dwOption, 
      string lpBuffer, 
      int dwBufferLength 
     ); 



     [STAThread] 
     static void Main(string[] args) 
     { 
      InternetSetOption(0, 42, null, 0); 
      InternetSetCookie("http://domain.name.com", "cookiename", "cookievalue"); 

      WebBrowser wb = new WebBrowser(); 
      string testUrl = "http://domain.name.com/fight.php?showAttackBg=true"; 
      string additionalHeaders = "User-Agent: Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit /528.18 (KHTML, like Gecko) Mobile/7A341" + Environment.NewLine + 
       "Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5" + Environment.NewLine + 
       "Accept-Language: en-gb"; 

      if (wb.Document == null) 
       wb.Navigate(testUrl, null, null, additionalHeaders); 

      while (wb.Document == null) 
       Application.DoEvents(); 

      Console.WriteLine("\nPress any key to continue..."); 
      Console.ReadKey(true); 
     } 
    } 
} 

Reference

+0

Ich habe nicht verstanden .. Wie kann ich einen Cookie von einem URI löschen? – JobaDiniz

0

Hier ist eine feinere Lösung, die nur Cookies (C/C++) löscht:

#include <wininet.h> 
#include <winineti.h> 
... 
DWORD dwSuppress = INTERNET_SUPPRESS_COOKIE_PERSIST; 
InternetSetOption(0, INTERNET_OPTION_SUPPRESS_BEHAVIOR, &dwSuppress, sizeof(DWORD)); 

Alle Kredite an this blog post (C#). Vergessen Sie nicht, die Dokumentation für InternetSetOption und INTERNET_SUPPRESS_COOKIE_PERSIST zu überprüfen

Verwandte Themen