2009-11-06 13 views
10

Cómo puedo configurar y eliminar cookies para un dominio en el control del webbrowser sin usar Javascript (que no permite establecer/eliminar cookies sin navegar primero al sitio web).)Cómo configurar y eliminar cookies del control WebBrowser para dominios arbitrarios

+0

¿Cuál es su requisito/escenario para esto? "Del control del navegador web" podría no ser necesario. ¿Tienes el control del sitio? Si lo hace, puede agregar y eliminar las cookies de HttpRequest, y esa API le permite especificar el dominio de la cookie. –

+0

Tengo un navegador y deseo agregar la capacidad de modificar todas las cookies para un sitio web determinado. –

Respuesta

3

Gestionado para realizar esta tarea mediante la combinación de estos 2:

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

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

+2

He revisado las URL pero no he encontrado ninguna solución. ¿Puedes darme la breve solución? Me golpeó con el mismo problema de los últimos 10 días – Avinash

+1

@ dr.evil ¿Puede proporcionar un resumen de lo que hizo para resolver esto? ... Las respuestas del enlace solo no son tan buenas en SO. – Lijo

-3

No puede eliminar las cookies de un dominio que no sea el dominio del sitio actual.

Para hacer lo que necesita debe tener acceso a la máquina (es decir, la barra de herramientas instalada). Incluso entonces es kludgy.

La única excepción es si se encuentra en un dominio donde la cookie está utilizando el * comodín, por ejemplo * .stackoverflow.com. Si cambia una cookie con el comodín, todos los subdominios secundarios (es decir, blog.stackoverflow.com) tendrán acceso y verán el cambio realizado en la cookie.

+0

Desde "Webrowser Control", esta no es una aplicación web sino Winforms. –

0

IE Utiliza las funciones de WinInet para la creación de redes para que pueda usar WinInet's cookie functions para cambiar la cookie. Actualización: el requisito exige una configuración por proceso. Dado que la ubicación de la carpeta de caché no está almacenada en las configuraciones de IE, la clave de registro IDocHostUIHandler2 :: GetOverrideKeyPath no funcionará. No sé cómo personalizar la ubicación de la carpeta de cookies en el nivel de proceso, excepto para enganchar todas las API de WinInet (y atascado con la actualización de la aplicación para acomodar futuras API de WinInet).

+1

¿No es eso para IE completo? No quiero eliminar las cookies del navegador de los usuarios para IE, debería ser algo solo para el control web alojado de la aplicación actual. Corrígeme si estoy equivocado. –

+0

Si desea aislar las cookies de su aplicación, debe anular la configuración de registro del directorio de caché a través de IDocHostUIHandler2 :: GetOverrideKeyPath –

+0

. No estoy seguro de que el truco GetOverrideKeyPath funcione. Querrá utilizar InternetSetCookieEx de cualquier manera. – EricLaw

1

Esperanza esto ayuda

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

No entendí ... ¿cómo puedo eliminar una cookie de un URI? – JobaDiniz

0

Aquí hay una solución más fino que sólo borra las cookies (C/C++):

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

Todos los créditos a this blog post (C#). No olvide verificar la documentación para InternetSetOption y INTERNET_SUPPRESS_COOKIE_PERSIST

Cuestiones relacionadas