Как я могу иметь несколько экземпляров webkit без совместного использования файлов cookie?

У меня есть приложение, которое создает пару экземпляров WebView, и я бы хотел, чтобы они работали как можно более независимо.

По крайней мере, я не хочу, чтобы они делились файлами cookie. Быстрый поиск в Google дал мне результаты типа "Вы не можете." Я надеюсь, что у кого-то есть лучший ответ.

12.12.2008 21:34:29
4 ОТВЕТА
РЕШЕНИЕ

Основной ответ "вы не можете".

Посмотрев на это немного, я думаю, что это возможно, но чрезвычайно сложно. Это будет включать в себя реализацию resourceLoadDelegate в вашем WebView, который реализует -webView:resource:willSendRequest:redirectResponse:fromDataSource:и изменяет запрос на отключение HTTPShouldHandleCookiesи добавляет любые соответствующие файлы cookie в запрос вручную. Он также должен быть реализован, -webView:resource:didReceiveResponse:fromDataSource:чтобы узнать о любых куки, возвращаемых с сервера. Вы можете выделить / инициализировать свою собственную копию NSHTTPCookieStorageкаждого веб-просмотра и использовать ее для хранения / получения файлов cookie.

18
13.12.2008 11:23:48
Хех. Это восхитительно. Я закончил тем, что изменил веб-сервис, чтобы обойти проблемы, которые у меня были. Я ожидаю, что это будет что-то общее (приватный режим, многопользовательское тестирование и т. Д.). Спасибо за внимание к этому.
Dustin 13.12.2008 11:15:58
Я фактически реализовал подкласс WebView, который делает это, используя метод, описанный в этом ответе. igisolatedcookiewebview.googlecode.com (Новая лицензия BSD).
Isaac 12.03.2010 22:07:51
@ Исаак Вау, идеально подходит для того, что мне нужно. Одна проблема, которую я заметил, находится в строке 152 вашего файла .m (инициализация массива cookieStore). Если вы используете ARC и удаляете вызов сохранения, он вылетает. Мне просто нужно было использовать -fno-objc-arc в этом файле.
sudo 29.09.2013 01:30:12
Это решение неправильно обрабатывает файлы cookie, установленные js document.cookie, не так ли?
Juanjo Conti 24.02.2015 16:26:29
Я обнаружил, что проект пытается решить эту проблему, и он утверждает, что он обрабатывает файлы cookie как на уровне запросов, так и на уровне JS. github.com/cyyuen/ADCookieIsolatedWebView
Seunghoon 6.08.2015 09:18:37

Я бы предположил, что куки будут настроены на уровне службы / приложения, а не для конкретных случаев или процессов. Возможно, вы могли бы пересмотреть свой вопрос, чтобы найти способ решить вашу проблему, которая требует, чтобы экземпляры не разделяли файлы cookie.

Какова мотивация не делить куки между экземплярами?

Если вам просто нужно 3 просмотра одного и того же веб-ресурса, вы можете настроить несколько виртуальных хостов, которые указывают на один и тот же источник данных.

0
12.12.2008 22:02:19
WebView - это вид браузера webkit. У меня фактически два окна смотрят на одну и ту же веб-страницу, и я бы хотел, чтобы они не использовали один и тот же сеанс.
Dustin 12.12.2008 22:39:57

Этот пост подводит итог того, что вы могли бы сделать. Я не уверен, выполнимо ли это для вас, и я чувствую, что это не будет простой задачей, может быть, даже рискованной, но это кажется возможным : автор утверждает, что iCab делает это таким образом.

Я тоже надеялся на более простое решение. Конечно, поскольку Webkit является открытым исходным кодом, вы можете просто развернуть собственную версию фреймворка с измененным поведением?

3
13.12.2008 11:49:56

Что вы можете сделать, так это взглянуть на libcurl, который может работать с хранилищами cookie, которые не смешиваются с хранилищем cookie всей системы загрузки URL для тех запросов, которые вы хотите разделить. Для меня это кажется верным и простым решением. Если вам действительно нужно зависеть от webview / webkit, это может быть не так.

0
22.12.2008 16:48:28
Да, материал для веб-сайтов был очень важен для меня. Я, вероятно, все еще мог сделать это, но надеялся избежать переписывания мира. В итоге я сменил сервер. вздох
Dustin 22.12.2008 18:45:29