c# .net internet-explorer cookies browser

c# - Eliminación de las cookies del control WebBrowser para todos los sitios SIN la eliminación del propio IE



.net internet-explorer (3)

EDITAR: Hasta donde sé, no hay una solución para este problema, por lo que es otro testimonio del hecho de que uno no debe usar el WebBrowser de C #. Terminamos con una señal de advertencia al inicio de nuestro programa, notificando al usuario que las cookies se borrarán para IE.

La versión corta de lo que estoy tratando de hacer está en el título. Aquí está la versión larga.

Tengo un poco de un problema complejo que estoy seguro que recibiré muchas conjeturas como respuesta a. Para mantener las conjeturas bien intencionadas pero desafortunadamente inútiles al mínimo, permítanme mencionar primero que la solución a este problema no es simple, por lo que desafortunadamente las sugerencias simples no serán de ninguna ayuda, aunque aprecio el esfuerzo.

El componente .NET WebBrowser es fundamentalmente IE en sí mismo, por lo que las soluciones con cualquier tipo de advertencias no funcionarán. Necesito hacer exactamente lo que estoy tratando de hacer, e incluso una advertencia aparentemente menor derrotará completamente el propósito. A riesgo de sonar arrogante, necesito ayuda de alguien que realmente tenga un conocimiento profundo sobre .NET WebBrowser y / o WinInet y / o cómo comunicarse con el sistema subyacente de Windows desde C # ... o cómo encapsular el código C ++ en DO#.

Dicho esto, no espero que nadie haga esto por mí, y he encontrado algunos consejos prometedores que se explican más adelante en esta pregunta.

Pero primero ... lo que estoy tratando de lograr es esto.

Tengo un componente Windows.Forms que contiene un control WebBrowser. Este control necesita:

  1. Borrar TODAS las cookies para TODOS los sitios web.
  2. Visite varios sitios web, uno tras otro, registre cookies y manejelas correctamente. Esta parte ya funciona bien, así que no tengo ningún problema con esto.
  3. Enjuague y repita ... teóricamente para siempre.

Ahora, aquí está el verdadero problema. Necesito borrar todas esas cookies (para todos y cada uno de los sitios), pero solo para el control de WebBrowser y NO para las cookies que IE utiliza correctamente. Lo que está fundamentalmente mal con este enfoque es, por supuesto, el hecho de que el control .NET WebBrowser es IE. Pero soy un joven terco e insisto en que sea posible, ¡o si no! ;)

Aquí es donde estoy atrapado en este momento.

Es simplemente imposible borrar todas las cookies para el control de WebBrowser mediante C # solo. Uno debe usar DllImport y todas las cosas locas que vienen con él. Este trozo funciona bien para ese propósito:

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

Y luego, en la función que realmente hace la eliminación de las cookies:

InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0);

Luego todas las cookies se borran y, como tal, estoy feliz. El programa funciona exactamente como estaba previsto, además del hecho de que también borra las cookies de IE, lo que no debe permitirse.

De un compañero de StackOverflower (si es una palabra), Sheng Jiang propuso esto a un problema diferente en un comentario, pero no dio más detalles:

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

Busqué en Internet por IDocHostUIHandler2 y GetOverrideKeyPath, pero no tengo idea de cómo usarlas desde C # para aislar las cookies de mi control WebBrowser. Mi experiencia con el registro de Windows se limita a RegEdit (por lo que entiendo que es una estructura de árbol con diferentes tipos de datos, pero eso es todo ... No tengo un conocimiento profundo de la relación del registro con IE, por ejemplo).

Esto es lo que desenterré en MSDN:

IDocHostUIHandler2 docs: http://msdn.microsoft.com/en-us/library/aa753275%28VS.85%29.aspx

Documentos de GetOverrideKeyPath: http://msdn.microsoft.com/en-us/library/aa753274%28VS.85%29.aspx

Creo que sé aproximadamente lo que hacen estas cosas, simplemente no sé cómo usarlas.


¿Es necesario que las cookies funcionen en IE al mismo tiempo? ¿Es posible "restaurar" las cookies originales a IE después de que se ejecute su programa?

ACTUALIZAR:

Otra idea:

Me pregunto qué pasaría si ejecuta su programa con una cuenta de usuario diferente, a través de la personificación. Es posible que almacene esas cookies en un perfil diferente de Windows ...


Ese comentario en Cómo configurar y eliminar las cookies de WebBrowser Control para dominios arbitrarios es un error. La configuración de la carpeta de caché de WinInet aparentemente no está en la configuración de IE pero es una configuración de la carpeta de Shell, ya que IDocHostUIHandler2 solo puede personalizar la configuración almacenada en la clave de registro de IE, por lo que no es útil para esta tarea. No conozco una forma de personalizar la ubicación de la carpeta, excepto para enlazar todas las API de WinInet (y me quedo con la actualización de la aplicación para acomodar las futuras API de WinInet), que no es fácil en C #. Voy a actualizar el viejo post ahora.