webkitview how objective-c macos webkit

objective c - how - ¿Cómo puedo tener varias instancias de webkit sin compartir cookies?



webkitview swift 4 (4)

Tengo una aplicación que crea un par de instancias de WebView y me gustaría que funcione de la manera más independiente posible.

Por lo menos, no quiero que compartan cookies. Una búsqueda rápida en Google me dio resultados que me gustaban "no puedes". Espero que alguien tenga una mejor respuesta.


Supongo que las cookies se configurarán a nivel de servicio / aplicación y no para instancias o procesos particulares. Tal vez podría revisar su pregunta para encontrar una manera de resolver el problema que está teniendo que requiere que las instancias no compartan las cookies.

¿Cuál es la motivación para no compartir cookies entre las instancias?

Si solo necesita 3 vistas en el mismo recurso web, puede configurar algunos hosts virtuales que apuntan a la misma fuente de datos.


La respuesta básica es "no puedes".

Después de mirar esto por un momento, creo que es posible, pero extremadamente complicado. -webView:resource:willSendRequest:redirectResponse:fromDataSource: implementar un resourceLoadDelegate en su WebView que implemente -webView:resource:willSendRequest:redirectResponse:fromDataSource: y modifique la solicitud para desactivar HTTPShouldHandleCookies y agregue las cookies relevantes a la solicitud de forma manual. También debe implementar -webView:resource:didReceiveResponse:fromDataSource: para conocer las cookies devueltas por el servidor. Puede asignar / iniciar su propia copia de NSHTTPCookieStorage por webview y usar eso para almacenar / recuperar las cookies.


Esta publicación resume lo que podrías hacer. No estoy seguro si es factible para usted y creo que no sería una tarea directa, incluso arriesgada, pero parece posible : el autor afirma que iCab lo hace de esta manera.

Esperaba una solución más simple también, realmente. Por supuesto, dado que Webkit es de código abierto, ¿podría lanzar su propia versión del framework con un comportamiento diferente, supongo?


Lo que puede hacer es echar un vistazo a libcurl, que puede manejar las tiendas de cookies que no se mezclan con el almacenamiento de cookies de todo el sistema de carga de URL para las solicitudes que desea separar. Para mí eso parece ser una solución válida y simple. Si realmente necesita depender de webview / webkit, podría no serlo.