2009-11-06 12 views
10

Come posso impostare ed eliminare i cookie per un dominio nel controllo webbrowser senza utilizzare Javascript (che non consente di impostare/eliminare i cookie senza prima navigare nel sito Web.)Come impostare ed eliminare i cookie da Controllo WebBrowser per domini arbitrari

+0

Qual è il tuo requisito/scenario per questo? "Dal controllo del browser web" potrebbe non essere necessario. Hai il controllo del sito? Se lo fai, puoi aggiungere e rimuovere i cookie da HttpRequest e tale API ti consente di specificare il dominio dei cookie. –

+0

Ho un browser e voglio aggiungere la possibilità di modificare tutti i cookie per un determinato sito web. –

risposta

3

Managed per eseguire questa operazione mediante la combinazione di questi 2:

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

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

+2

Ho esaminato gli URL ma non ho trovato alcuna soluzione. puoi per favore darmi la breve soluzione. Sono stato colpito dallo stesso problema negli ultimi 10 giorni – Avinash

+1

@ dr.evil Puoi fornire un riassunto su cosa hai fatto per risolvere questo problema? ... Le risposte solo per il collegamento non sono così buone in SO. – Lijo

-3

Non è possibile eliminare i cookie per un dominio diverso dal dominio del sito corrente.

Per fare ciò che si richiede è necessario avere accesso alla macchina (cioè barra degli strumenti installata). Anche allora è kludgy.

L'unica eccezione è se ci si trova in un dominio in cui il cookie utilizza il carattere jolly *, ad esempio * .stackoverflow.com. Se modifichi un cookie con il carattere jolly, tutti i sottodomini secondari (ad esempio blog.stackoverflow.com) avranno accesso e vedranno la modifica apportata al cookie.

+0

Da "Controllo Webrowser", questa non è un'applicazione Web, è Winforms. –

0

IE Utilizza le funzioni WinInet per il networking in modo da poter utilizzare WinInet's cookie functions per modificare il cookie. Aggiornamento : il requisito richiede l'impostazione per processo. Poiché la posizione della cartella cache non è memorizzata nella chiave di registro delle impostazioni di IE, IDocHostUIHandler2 :: GetOverrideKeyPath non funzionerà. Non conosco un modo per personalizzare la posizione della cartella dei cookie a livello di processo tranne che per agganciare tutte le API WinInet (e bloccato con l'aggiornamento dell'applicazione per ospitare le future API WinInet).

+1

Non è così per l'intero IE? Non voglio cancellare i cookie dei browser degli utenti per IE, dovrebbe essere qualcosa solo per il controllo web ospitato dell'applicazione corrente. Correggimi se sbaglio. –

+0

Se si desidera isolare i cookie dell'applicazione, è necessario eseguire l'override dell'impostazione del registro di directory Cache tramite IDocHostUIHandler2 :: GetOverrideKeyPath –

+0

Non sono sicuro che il trucco GetOverrideKeyPath possa funzionare. Dovrai utilizzare InternetSetCookieEx in qualsiasi modo. – EricLaw

1

Spero che questo aiuti

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

Non ho capito .. come posso cancellare un cookie da un URI? – JobaDiniz

0

Ecco una soluzione più fine che cancella solo i cookie (C/C++):

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

Tutti i crediti per this blog post (C#). Non dimenticare di controllare la documentazione per InternetSetOption e INTERNET_SUPPRESS_COOKIE_PERSIST

Problemi correlati