WebView не принимает некоторые файлы cookie

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

CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
CookieManager.getInstance().setAcceptCookie(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    CookieManager.setAcceptFileSchemeCookies(true);
    CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
}
webView.loadUrl("https://www.irctc.co.in/nget/train-search");

На одном этапе (после оплаты с платежного шлюза) вызывается метод shouldOverrideUrlLoading, после чего он должен перейти на страницу успешной транзакции, но продолжает переходить на страницу входа. Это мой метод:

@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    Log.d(TAG, "The URL is loaded in webview itself");
    return false;
}

Используя Инструменты разработчика Chrome, я вижу следующие файлы cookie для веб-сайта WebView не принимает некоторые файлы cookie

Когда я вызываю метод CookieManager.getInstance().getCookie(url), я вижу, что файлы cookie ДЖЕСЕСИОНИД и SLB_Cookie присутствуют в веб-просмотре, но не уверен в этом файле cookie Локальное хранилище. Кроме того, если я удалю файл cookie Локальное хранилище в Chrome, я получаю ту же страницу (страницу входа) вместо страницы успешной транзакции, такой как WebView. Поэтому я думаю, что если я каким-либо образом проверю, присутствует ли файл cookie локального хранилища в веб-просмотре или нет, а если его нет, то, если я добавлю его, моя работа будет выполнена. Но я не могу выполнить ни одну из задач.

Вы хотите передать объект входа в файл cookie по URL-адресу в веб-просмотре?

Nirav Joshi 09.10.2018 14:13

Я просто хочу, чтобы открываемая финальная страница была страницей успешной транзакции, а не страницей входа. Причина, по которой (я думаю), файл cookie локального хранилища для этого веб-сайта не загружается в веб-просмотре, поэтому я хочу, чтобы он был загружен. Или, если есть другая альтернатива (или причина) проблемы, я хотел бы знать об этом.

Vishal Afre 09.10.2018 14:22

вы должны понять, как этот сайт принимает cookie, и вы должны передать его, как я ответил на него ниже

Nirav Joshi 09.10.2018 14:30

Привет Вишал. Пожалуйста, не добавляйте сюда болтливых материалов. То, что вы исследовали проблему, считается само собой разумеющимся, вам не нужно об этом заявлять. Как долго вы застряли, вероятно, не имеет значения и обычно добавляется в сообщения только для того, чтобы просить и умолять. Мы предпочитаем, чтобы благодарности и другие тонкости не добавлялись - мы предпочитаем писать здесь технические вопросы и часто указываем, что Stack Overflow - это не чат.

halfer 10.10.2018 00:14

Для справки иногда добавляю в комментарии этот совет: Обратите внимание, что здесь мы предпочитаем технический стиль письма. Мы мягко не приветствуем приветствия, надеемся, что вы можете помочь, спасибо, заранее спасибо, благодарственные письма, приветы, добрые пожелания, подписи, пожалуйста, не могли бы вы помочь, болтливый материал и сокращенный txtspk, мольбу, как долго вы был застрял, советы по голосованию, мета-комментарии и т. д. Просто объясните свою проблему и покажите, что вы пробовали, чего вы ожидали и что на самом деле произошло.

halfer 10.10.2018 00:14

Как правило, модераторы встают на сторону редакторов, которые аккуратно и вежливо следят за соблюдением этого правила. Вот каноническая ссылка.

halfer 10.10.2018 00:17
2
6
1 147
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите передать данные пользователей для входа в файл cookie в Webview, сделайте это так На днях мне пришлось передать объект входа в систему по определенному URL-адресу. следующим образом.

            WebSettings settings = webViewRoi.getSettings();
            settings.setDomStorageEnabled(true);
            settings.setJavaScriptEnabled(true);
            settings.setJavaScriptCanOpenWindowsAutomatically(false);
            settings.setAppCacheEnabled(true);
            settings.setAllowUniversalAccessFromFileURLs(true);
            settings.setAllowFileAccessFromFileURLs(true);

            Gson gson = new GsonBuilder().disableHtmlEscaping().create();


            FormsDTO formsDTO = new FormsDTO();
            FormsDTOProfile dtoProfile = new FormsDTOProfile(LoginActivity.loginInfoDTO.getProfile());
            formsDTO.setProfile(dtoProfile);
            formsDTO.setAuthorized(true);
            formsDTO.setToken(LoginActivity.loginInfoDTO.getToken());

            String out123 = gson.toJson(formsDTO);

            String auth2 = URLEncoder.encode(out123, "UTF-8");

            String z = "userInfo = " + auth2;  // here userinfo is the key of cookie
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setAcceptCookie(true);


            cookieManager.setCookie(url, z);
            webViewRoi.setWebChromeClient(new WebChromeClient());
            webViewRoi.loadUrl(url);

Итак, если вы знаете ключевое имя файла cookie, вы можете передать свой объект входа в систему через файл cookie. надеюсь, это поможет вам.

Это мой объект, вы также можете проигнорировать это и передать свой токен в сериализованную форму

Nirav Joshi 10.10.2018 06:30

Большое спасибо ... CookieManager cookieManager = CookieManager.getInstance (); cookieManager.setAcceptCookie (true); cookieManager.setCookie (url, z); выполнил эту работу для меня ... Я пробовал метод setCookie и раньше, но я думаю, что чего-то не хватало. Но теперь работает как шарм :)

Vishal Afre 15.10.2018 15:54

Другие вопросы по теме