2008-12-12 9 views

Respuesta

17

La respuesta básica es "no se puede".

Después de mirar esto por un momento, creo que es posible, pero extremadamente complicado. Implicaría 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 manualmente. 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 vista web y usarla para almacenar/recuperar las cookies.

+0

Heh. Eso es increíble. Terminé cambiando el servicio web para solucionar los problemas que estaba teniendo. Esperaría que esto sea algo común (modo privado, prueba multiusuario, etc.). Gracias por mirar en esto. – Dustin

+14

De hecho, implementé una subclase WebView que hace esto usando el método descrito en esta respuesta. http://igisolatedcookiewebview.googlecode.com/ (Nueva licencia BSD). – Isaac

+0

@Isaac Wow, absolutamente perfecto para lo que necesito. Un problema que noté está en la línea 152 de su archivo .m (inicialización de la matriz cookieStore), si está utilizando ARC y elimina la llamada de retención, se bloquea. Solo tuve que usar -fno-objc-arc en ese archivo. – sudo

0

Supongo que las cookies se configurarán en un servicio/nivel de 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.

+0

WebView es la vista del navegador webkit. De hecho, tengo dos ventanas mirando la misma página web, y me gustaría que no utilicen la misma sesión. – Dustin

3

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

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

0

Lo que puede hacer es echar un vistazo a libcurl que puede manejar tiendas de cookies que no se mezclan con el URL Cargando todo el almacenamiento de cookies para aquellas 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.

+0

Sí, las cosas de webvivew eran bastante importantes para mí. Probablemente aún podría hacerlo funcionar, pero esperaba evitar reescribir el mundo. Terminé cambiando el servidor en su lugar. *suspiro* – Dustin

Cuestiones relacionadas