অ্যান্ড্রয়েড ওয়েবভিউ কুকি সমস্যা


89

আমার কাছে এমন একটি সার্ভার রয়েছে যা আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিকে একটি সেশন কুকি প্রামাণিক যোগাযোগের জন্য প্রেরণ করে। আমি একই সার্ভারটির দিকে ইঙ্গিত করে একটি URL দিয়ে একটি ওয়েবভিউ লোড করার চেষ্টা করছি এবং প্রমাণীকরণের জন্য আমি সেশন কুকিতে পাস করার চেষ্টা করছি। আমি পর্যবেক্ষণ করছি যে এটি মাঝেমধ্যে কাজ করে তবে কেন তা আমার কোনও ধারণা নেই। আমি আমার সার্ভারে অন্যান্য কল করার জন্য একই সেশন কুকি ব্যবহার করি এবং এগুলি প্রমাণীকরণে কখনই ব্যর্থ হয়। ওয়েবভিউতে কোনও ইউআরএল লোড করার চেষ্টা করার সময় আমি এই সমস্যাটি কেবলমাত্র পর্যবেক্ষণ করি এবং এটি প্রতিবার হয় না। খুবই হতাশাজনক.

নীচে কোডগুলি ব্যবহার করছি যা আমি এটি করতে ব্যবহার করছি। যে কোন সাহায্য সাদরে গৃহীত হবে।

String myUrl = ""http://mydomain.com/"; 
CookieSyncManager.createInstance(this); 
CookieManager cookieManager = CookieManager.getInstance(); 
Cookie sessionCookie =  getCookie(); 
if(sessionCookie != null){ 
    String cookieString = sessionCookie.getName() +"="+sessionCookie.getValue()+"; domain="+sessionCookie.getDomain(); 
    cookieManager.setCookie(myUrl, cookieString); 
    CookieSyncManager.getInstance().sync(); 
} 

WebView webView = (WebView) findViewById(R.id.webview); 
webView.getSettings().setBuiltInZoomControls(true); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.setWebViewClient(new MyWebViewClient()); 
webView.loadUrl(myUrl);

এই প্রশ্নের পড়ুন stackoverflow.com/questions/2566485/...
টি নীরজ

উত্তর:


55

ধন্যবাদ জাস্টারিংম্যান ! এটি আমার পক্ষে কাজ করেছে, আমি আমার ডিফল্ট এইচটিটিপি ক্লায়েন্ট অনুরোধ এবং ওয়েবভিউ ক্রিয়াকলাপের মধ্যে কুকি ভাগ করে নিতে পেরেছি:

//------- Native request activity
private DefaultHttpClient httpClient;
public static Cookie cookie = null;

//After Login
List<Cookie> cookies = httpClient.getCookieStore().getCookies();
for (int i = 0; i < cookies.size(); i++) {
    cookie = cookies.get(i);
}

//------- Web Browser activity
Cookie sessionCookie = myapp.cookie;
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
if (sessionCookie != null) {
    cookieManager.removeSessionCookie();
    String cookieString = sessionCookie.getName() + "=" + sessionCookie.getValue() + "; domain=" + sessionCookie.getDomain();
    cookieManager.setCookie(myapp.domain, cookieString);
    CookieSyncManager.getInstance().sync();
}   

এটি আমার জন্য কাজ করে মহান। আমি আমার কুকি ইউআরএলটি এভাবে তৈরি করেছি: স্ট্রিং url = (ڪوڪي.isSecure ()? "Https": "http") + ": //" + ڪوڪي.getDomain () + ڪوڪي.getPath ();
সীমানা

পোস্টের জন্য ধন্যবাদ ... এটি আমার অ্যাপ্লিকেশনটির জন্য টুইটার লগআউট বাস্তবায়নে আমাকে সহায়তা করেছে ...;)
রাহুল

তোমার দর্শন লগ করা বল কি myapp.cookie স্থানে লেখা যেতে পারেন
সুরজ জৈন

মূলশব্দটি হ'ল: স্ট্রিং কুকিস্ট্রিং = সেশনকুকি.জেটনেম () + "=" + সেশনকুকি.জেটভ্যালু () + "; ডোমেন =" + সেশনকুকি.জেটডোমাইন (); cookieManager.setCookie (myapp.domain, ڪوڪي স্ট্রিং);
জেনিচিমারো

4
কুকিসিঙ্কম্যানেজার এখন অবহিত :(
মিশা আকোপভ

18

আমার রবিবার নষ্ট করার জন্য অ্যান্ড্রয়েডকে ধন্যবাদ। । । আমার অ্যাপ্লিকেশনগুলিকে স্থির করে নেওয়ার বিষয়টি (আপনার ওয়েবভিউ শুরু করার পরে)

if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ) {

  CookieManager cookieManager = CookieManager.getInstance();

  cookieManager.setAcceptThirdPartyCookies( webView, true );

}

আমার বলা উচিত উপরোক্ত উত্তরগুলি সম্ভবত কাজ করবে তবে আমার পরিস্থিতিতে অ্যান্ড্রয়েড ভি 5+ চলে গেল আমার অ্যান্ড্রয়েড ওয়েবভিউ জাভাস্ক্রিপ্টের 'অ্যাপস' মারা গেছে।


4
উহু ! তুমি শুধু আমার দিন বাঁচিয়েছ!
লে মিন

14

সমাধান: ওয়েবভিউ কুকিসিঙ্ক ম্যানেজার

CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(mWebView.getContext());
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();
cookieManager.setCookie("http://xx.example.com","mid="+MySession.GetSession().sessionId+" ; Domain=.example.com");
cookieSyncManager.sync();

String cookie = cookieManager.getCookie("http://xx.example.com");

Log.d(LOGTAG, "cookie ------>"+cookie);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new TuWebViewClient());
mWebView.loadUrl("http://xx.example.com");

আপনি কি থেকে পেয়েছেন cookie?, আমি কেবল এইরকমই পাই: PHPSESSID=ljfakdjfklasdfaj!, এটি কি যথেষ্ট?
ফ্রান্সিসকো

6
এখানে মাইসেশন কী?
ব্যবহারকারী 3


3

আমি সেই অধিবেশন কুকিকে পছন্দ হিসাবে সংরক্ষণ করব এবং কুকি পরিচালকের সাথে জোর করে এটি পুনরায় তৈরি করব ulate এটি অ্যাক্টিভিটি পুনরায় আরম্ভ না করে সেশন কুকি বলে মনে হচ্ছে


আমার যুক্ত করা উচিত যে আমার অ্যাপ্লিকেশনটি আমার সার্ভার কলগুলিতে আরও অনেকগুলি অ-ওয়েবভিউ করে তোলে যা প্রমাণীকরণের ক্ষেত্রে কখনই ব্যর্থ হয়। আমি যখন কোনও ওয়েবভিউতে কোনও URL লোড করার চেষ্টা করি তখনই আমি এই সমস্যাটি লক্ষ্য করি। "কুকি সেশনকুকি = getCookie ();" আমি আমার সার্ভারের সাথে সমস্ত বার্তাগুলির জন্য অ্যাপ্লিকেশনটির ডিবি সেশন কুকিটি ব্যবহার করছি।
ন্যানারপাস

আচ্ছা আপনি যদি এইচটিপিপ্লিয়েন্ট ব্যবহার করেন তবে এর নিজস্ব কুকি স্টোর রয়েছে, তাই আপনি যদি ক্লায়েন্টের একক উদাহরণ ধরে রাখেন তবে আপনার কুকি বেঁচে থাকবে, তবে এটি আপনার ওয়েব ভিউ দ্বারা ব্যবহৃত
কোনওটির

যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনি বলছেন যে কুকি ম্যানেজারটি কুকি ম্যানেজ.জেটআইনস্ট্যান্স () দ্বারা ফিরে এসেছে; HttpClient এর উদাহরণগুলির দ্বারা ব্যবহৃত কুকিজগুলিকে প্রভাবিত করবে, যা ওয়েবভিউগুলি ব্যবহার করে না। যদি এটি সত্য হয় তবে কী আপনি কীভাবে স্পষ্টভাবে ওয়েবভিউজে কুকিগুলি পাস করতে পারবেন তা জানেন? এছাড়াও, কুকি ম্যানেজার ডক্সের দিকে তাকানো, সম্ভবত "কুকি ম্যানেজ.আরসিএটসেপ্টকুকি (সত্য)" না বললে আমার সমস্যা হচ্ছে? সাহায্যের জন্য ধন্যবাদ, সত্যিই এটি প্রশংসা।
nannerpus

3

আমি খুব অনুরূপ ইস্যুতে কাজ করার জন্য আরও প্রায় অর্ধেক সময় ব্যয় করেছি। আমার ক্ষেত্রে আমার কাছে বেশ কয়েকটি কল ছিল, যা আমি একটি ওয়েব পরিষেবাতে ব্যবহার করে করেছি DefaulHttpClientএবং তারপরে আমি আমার মধ্যে সেশন এবং অন্যান্য সমস্ত সম্পর্কিত কুকিজ সেট করতে চেয়েছিলাম WebView

আমি জানি না এটি আপনার সমস্যার সমাধান করবে কিনা, কারণ আপনার getCookie()পদ্ধতিটি কী করে তা আমি জানি না , তবে আমার ক্ষেত্রে আসলে আমাকে ফোন করতে হয়েছিল।

cookieManager.removeSessionCookie();

প্রথমে সেশন কুকি অপসারণ এবং তারপরে এটি পুনরায় যুক্ত করুন। আমি যখন এটি সেট করার চেষ্টা করছিলাম তখন সন্ধান করছিলামJSESSIONID কুকিটি প্রথমে না সরিয়ে মানটি সেট করতে চেয়েছিলাম সেটি সংরক্ষণ করা হচ্ছে না। এটি আপনাকে নির্দিষ্ট সমস্যাটিতে সহায়তা করবে কিনা তা নিশ্চিত নয়, তবে ভেবেছিলাম যে আমি যা পেয়েছি তা ভাগ করব।


কেন না CookieManager.getInstance().removeAllCookie ();?
ফ্রান্সিসকো

2

কিছুক্ষণ গবেষণা করার পরে আমি কিছু টুকরো সংগ্রহ করেছি যা আমাকে এই সমাধানে নিয়ে আসতে বাধ্য করে। একবার যদি কুকিসিঙ্কম্যানেজার অবচিত হয়ে যায়, আজকাল কোটলিনে ওয়েবভিউয়ের জন্য একটি নির্দিষ্ট কুকি সেট করার সেরা উপায় এটি হতে পারে, আপনার আর কোনও প্রয়োজন নেই।

private fun setCookie(){
    val webView = WebView(this) // this = context
    val cookieManager = CookieManager.getInstance()
    cookieManager.acceptCookie()

    val domain = "https://www.yourdomain.com/"

    webView.webViewClient = WebViewClient()
    webView.settings.javaScriptEnabled = true

    cookieManager.setCookie(domain,"$cookieKey=$cookieValue")
    cookieManager.setAcceptThirdPartyCookies(webView, true)

    webView.loadUrl(domain)
}

1

আমার এখানে অন্য লোকদের থেকে আলাদা দৃষ্টিভঙ্গি রয়েছে, এবং এটি এমন একটি পদ্ধতির যা কুকিসিঙ্কম্যানেজারের সাথে কাজ না করেই গ্যারান্টিযুক্ত (যেখানে আপনি "নোট করুন যে এমনকি সিঙ্ক (এমনকি সংলগ্নভাবে সংঘটিত হয়") এর মতো শব্দার্থবিজ্ঞানের করুণায় পড়েছেন)।

মূলত, আমরা সঠিক ডোমেনে ব্রাউজ করি, তারপরে আমরা সেই ডোমেনের জন্য কুকিজ সেট করতে পৃষ্ঠা প্রসঙ্গ থেকে জাভাস্ক্রিপ্ট কার্যকর করি (একইভাবে পৃষ্ঠা নিজেই করবে)। পদ্ধতির দুটি ত্রুটিগুলি হ'ল আপনাকে অতিরিক্ত অতিরিক্ত অনুরোধের কারণে অতিরিক্ত রাউন্ড ট্রিপ সময় প্রবর্তন করতে পারে; এবং যদি আপনার সাইটে কোনও ফাঁকা পৃষ্ঠার সমতুল্য না থাকে, তবে আপনাকে সঠিক জায়গায় নিয়ে যাওয়ার আগে আপনি প্রথমে যে কোনও ইউআরএল লোড করুন এটি ফ্ল্যাশ করতে পারে।

import org.apache.commons.lang.StringEscapeUtils;
import org.apache.http.cookie.Cookie;
import android.annotation.SuppressLint;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class WebViewFragment {
    private static final String BLANK_PAGE = "/blank.html"

    private CookieSyncManager mSyncManager;
    private CookieManager mCookieManager;

    private String mTargetUrl;
    private boolean mInitializedCookies;
    private List<Cookie> mAllCookies;

    public WebViewFragment(Context ctx) {
        // We are still required to create an instance of Cookie/SyncManager.
        mSyncManager = CookieSyncManager.createInstance(ctx);
        mCookieManager = CookieManager.getInstance();
    }

    @SuppressLint("SetJavaScriptEnabled") public void loadWebView(
                String url, List<Cookie> cookies, String domain) {
        final WebView webView = ...

        webView.setWebViewClient(new CookeWebViewClient());
        webView.getSettings().setJavaScriptEnabled(true);

        mInitializedCookies = false;
        mTargetUrl = url;
        mAllCookies = cookies;
        // This is where the hack starts.
        // Instead of loading the url, we load a blank page.
        webView.loadUrl("http://" + domain + BLANK_PAGE);
    }

    public static String buildCookieString(final Cookie cookie) {
        // You may want to add the secure flag for https:
        // + "; secure"
        // In case you wish to convert session cookies to have an expiration:
        // + "; expires=Thu, 01-Jan-2037 00:00:10 GMT"
        // Note that you cannot set the HttpOnly flag as we are using
        // javascript to set the cookies.
        return cookie.getName() + "=" + cookie.getValue()
                    + "; path=" + cookie.getPath()
                    + "; domain=" + cookie.getDomain()
    };

    public synchronized String generateCookieJavascript() {
        StringBuilder javascriptCode = new StringBuilder();
        javascriptCode.append("javascript:(function(){");
        for (final Cookie cookie : mAllCookies) {
            String cookieString = buildCookieString(cookie);
            javascriptCode.append("document.cookie=\"");
            javascriptCode.append(
                     StringEscapeUtils.escapeJavascriptString(cookieString));
            javascriptCode.append("\";");
        }
        // We use javascript to load the next url because we do not
        // receive an onPageFinished event when this code finishes.
        javascriptCode.append("document.location=\"");
        javascriptCode.append(
                StringEscapeUtils.escapeJavascriptString(mTargetUrl));
        javascriptCode.append("\";})();");
        return javascriptCode.toString();
    }

    private class CookieWebViewClient extends WebViewClient {
        @Override public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            if (!mInitializedCookies) {
                mInitializedCookies = true;
                // Run our javascript code now that the temp page is loaded.
                view.loadUrl(generateCookieJavascript());
                return;
            }
        }
    }
}

আপনি যদি কুকিজের ডোমেনটিকে বিশ্বাস করেন তবে আপনি অ্যাপাচি কমন্স ছাড়াই পালাতে পারবেন, তবে আপনাকে বুঝতে হবে যে আপনি যদি সাবধান না হন তবে এটি এক্সএসএস ঝুঁকি নিয়ে আসতে পারে।


1

এটি কোডের একটি কার্যকারী বিট।

    private void setCookie(DefaultHttpClient httpClient, String url) {
    List<Cookie> cookies = httpClient.getCookieStore().getCookies();
    if (cookies != null) {
        CookieSyncManager.createInstance(context);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);

        for (int i = 0; i < cookies.size(); i++) {
            Cookie cookie = cookies.get(i);
            String cookieString = cookie.getName() + "=" + cookie.getValue();
            cookieManager.setCookie(url, cookieString);
        }
        CookieSyncManager.getInstance().sync();
    }
}

এখানে এইচটিসিপিএলটি হ'ল ডিফল্ট এইচটিপিপ্লায়েন্ট হ'ল আপনি এইচটিটিপিগেট / এইচটিটিপি পোস্টের অনুরোধে ব্যবহার করেছেন। এছাড়াও একটি জিনিস কুকির নাম এবং মান হ'ল তা নিশ্চিত করা উচিত

String cookieString = cookie.getName() + "=" + cookie.getValue();

সেটকুকি প্রদত্ত ইউআরএলের জন্য কুকি সেট করবে।


ঠিক যেমন একটি নোট: আপনি কুকি ম্যানেজ.সেটকুকি ব্যবহার করে সেশন কুকিজ সংরক্ষণ করতে পারবেন না
জন দো

আমি বুঝতে পারি না ... তুমি কি ব্যাখ্যা করতে পার?
droid ছাগলছানা

1

আমি নিজের সমস্ত কুকির সমস্যাগুলি অনক্রিটে এই এক লাইনের মাধ্যমে সমাধান করেছি:

CookieHandler.setDefault(new CookieManager());

সম্পাদনা করুন: এটি আজ কাজ করা বন্ধ করে দিয়েছে। :( কি বোকা, অ্যান্ড্রয়েড।


সুতরাং, কোন আপডেট? কেন এটি কাজ বন্ধ করে দিয়েছে ?, আপনি কি এটি সমাধান করেছেন?
ফ্রান্সিসকো

1

এটিও মুখোমুখি। আমি যা করেছি তা এখানে।

আমার অ্যাসিঙ্কটাস্কের ভিতরে আমার লগইনঅ্যাক্টিভিটিতে, আমার নিম্নলিখিতগুলি রয়েছে:

CookieStoreHelper.cookieStore = new BasicCookieStore();
BasicHttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, CookieStoreHelper.cookieStore);

HttpResponse postResponse = client.execute(httpPost,localContext);
CookieStoreHelper.sessionCookie = CookieStoreHelper.cookieStore.getCookies();

// যেখানে কুকিস্টোরহেল্পার.অ্যাসিওশনকুকি হল আরেকটি ক্লাস যা ভেরিয়েবল সেশনকুকিকে তালিকা কুকি হিসাবে সংজ্ঞায়িত করে; এবং কুকি স্টোর বেসিককুকিস্টোর কুকি স্টোর হিসাবে সংজ্ঞায়িত;

তারপরে আমার ফ্রেগমেন্টে, যেখানে আমার ওয়েবভিউ রয়েছে আমি নিম্নলিখিতগুলি পেয়েছি:

//DECLARE LIST OF COOKIE
List<Cookie> sessionCookie;

আমার পদ্ধতির ভিতরে বা আপনি ওয়েবভিউসক্লিয়েন্ট () সেট করার ঠিক আগে

WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

sessionCookie = CookieStoreHelper.cookieStore.getCookies();
CookieSyncManager.createInstance(webView.getContext());
CookieSyncManager.getInstance().startSync();
CookieManager cookieManager = CookieManager.getInstance();
CookieManager.getInstance().setAcceptCookie(true);
if (sessionCookie != null) {
   for(Cookie c:  sessionCookie){
      cookieManager.setCookie(CookieStoreHelper.DOMAIN, c.getName() + "=" + c.getValue());
   }
   CookieSyncManager.getInstance().sync();

 }

 webView.setWebViewClient(new WebViewClient() {
    //AND SO ON, YOUR CODE
 }

দ্রুত পরামর্শ: ফায়ারফক্সে ফায়ারবগ ইনস্টল করুন বা ক্রোমে ডেভেলপার কনসোল ব্যবহার করুন এবং আপনার ওয়েবপৃষ্ঠাটি পরীক্ষা করুন, কুকিটি ক্যাপচার করুন এবং ডোমেনটি পরীক্ষা করুন যাতে আপনি এটি অন্য কোথাও সঞ্চয় করতে পারেন এবং নিশ্চিত হন যে আপনি সঠিকভাবে সঠিক ডোমেন সেট করছেন।

সম্পাদনা করুন: কুকি স্টোরহেল্পার.কুসি সম্পাদনা কুকিস্টোরহেল্পার.অ্যাসিওনকুকিতে


1

আমার কাজের কোড

public View onCreateView(...){
    mWebView = (WebView) view.findViewById(R.id.webview);

    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);

        ...
        ...
        ...

    CookieSyncManager.createInstance(mWebView.getContext());
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.setAcceptCookie(true);
    //cookieManager.removeSessionCookie(); // remove
    cookieManager.removeAllCookie(); //remove
    // Recommended "hack" with a delay between the removal and the installation of "Cookies"
    SystemClock.sleep(1000);

    cookieManager.setCookie("https://my.app.site.com/", "cookiename=" + value + "; path=/registration" + "; secure"); // ;
    CookieSyncManager.getInstance().sync();

    mWebView.loadUrl(sp.getString("url", "") + end_url);

    return view;
}

ক্যোয়ারি ডিবাগ করতে, "কুকি ম্যানেজ.সেটকুকি (....)" আমি আপনাকে ডাটাবেস ওয়েবভিউ কুকি ক্রোমিয়াম.ডিবি ("/data/data/my.app.webview/database" এ সঞ্চিত) ডাটাবেসের বিষয়বস্তু সন্ধান করার পরামর্শ দিচ্ছি সেখানে আপনি সঠিক সেটিংস দেখতে পারবেন।

"কুকি ম্যানেজ.আরমোভসেশনকুকি () অক্ষম করা হচ্ছে;" এবং / অথবা "কুকি ম্যানেজ.আরমোভএলকুকি ();"

//cookieManager.removeSessionCookie();
// and/or
//cookieManager.removeAllCookie();"

ব্রাউজার দ্বারা সেট করা তাদের সাথে সেট মানটির তুলনা করুন। "পতাকা" ব্রাউজার ইনস্টল না হওয়া পর্যন্ত কুকিজগুলির ইনস্টলেশনের জন্য অনুরোধটি সামঞ্জস্য করুন আপনি যা ঠিক করেন তার সাথে এটি খাপ খায়। আমি দেখতে পেয়েছি যে একটি ক্যোয়ারী "পতাকা" হতে পারে:

// You may want to add the secure flag for https:
+ "; secure"
// In case you wish to convert session cookies to have an expiration:
+ "; expires=Thu, 01-Jan-2037 00:00:10 GMT"
// These flags I found in the database:
+ "; path=/registration"
+ "; domain=my.app.site.com"

ওয়েব ভিউতে স্টোর কুকির জন্য আমার উপরের কোডটি ব্যবহার রয়েছে তবে দয়া করে আমাকে পথ সম্পর্কে আমাকে জানান। এখানে পথ কি?
মেহুল ট্যাঙ্ক

@ মেহুলট্যাঙ্ক পথের পরামিতি একটি নথির অবস্থান নির্দিষ্ট করে। কুকিটি কেবলমাত্র সার্ভারে পাঠানো হয় যদি পাথটি বর্তমান বা পিতামাতার নথির অবস্থানের সাথে মেলে।
রোল্যান্ড ভ্যান ডের লিন্ডেন

1

বেশ কয়েকটি মন্তব্যে (কমপক্ষে এপিআই এর জন্য> = 21) যা আমি আমার অভিজ্ঞতা থেকে খুঁজে পেয়েছি এবং মাথাব্যথা দিয়েছি:

  1. httpএবং httpsইউআরএল পৃথক। এর জন্য কুকি সেট করা কুকি সেট করার http://www.example.comচেয়ে আলাদাhttps://www.example.com
  2. ইউআরএল শেষে একটি স্ল্যাশ এছাড়াও একটি পার্থক্য করতে পারে। আমার ক্ষেত্রে https://www.example.com/কাজ https://www.example.comকরে কিন্তু কাজ করে না।
  3. CookieManager.getInstance().setCookieএকটি অ্যাসিক্রোনাস অপারেশন করছে। সুতরাং, আপনি সেট করার পরে যদি আপনি এখনই ইউআরএল লোড করেন, তবে কুকিজ ইতিমধ্যে লেখা আছে কিনা তার নিশ্চয়তা নেই। অপ্রত্যাশিত এবং অস্থির আচরণগুলি প্রতিরোধ করতে, কুকি ম্যানেজার # সেটকুকি (স্ট্রিং ইউআরএল, স্ট্রিং মান, মান ক্যালব্যাক কলব্যাক) ( লিঙ্ক ) ব্যবহার করুন এবং কলব্যাক কল করার পরে ইউআরএল লোড করা শুরু করুন।

আমি আশা করি আমার দুটি সেন্ট কিছু লোকের কাছ থেকে কিছুটা সময় সাশ্রয় করবে যাতে আপনার মতো সমস্যার মুখোমুখি হবেন না।


কিভাবে ভিন্ন একটি কুকি সেটিং example.com জন্য একটি কুকি সেট থেকে ভিন্ন example.com ?
সফটমারশমালো

0

আমি একই সমস্যার মুখোমুখি হয়েছি এবং এটি সমস্ত অ্যান্ড্রয়েড সংস্করণে এই সমস্যাটি সমাধান করবে

private void setCookie() {
    try {
        CookieSyncManager.createInstance(context);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            cookieManager.setCookie(Constant.BASE_URL, getCookie(), value -> {
                String cookie = cookieManager.getCookie(Constant.BASE_URL);
                CookieManager.getInstance().flush();
                CustomLog.d("cookie", "cookie ------>" + cookie);
                setupWebView();
            });
        } else {
            cookieManager.setCookie(webUrl, getCookie());
            new Handler().postDelayed(this::setupWebView, 700);
            CookieSyncManager.getInstance().sync();
        }

    } catch (Exception e) {
        CustomLog.e(e);
    }
}

0

নোট করুন যে এটি স্বাভাবিক URL এর পরিবর্তে সাবডোমেনগুলি ব্যবহার করা ভাল। সুতরাং, .example.comপরিবর্তে সেট করুন https://example.com/

আমি যেমন লিখেছি জোডি জ্যাকবাস গিয়ার্স এবং অন্যান্যদের ধন্যবাদ:

if (savedInstanceState == null) {
    val cookieManager = CookieManager.getInstance()
    cookieManager.acceptCookie()
    val domain = ".example.com"
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        cookieManager.setCookie(domain, "token=$token") {
            view.webView.loadUrl(url)
        }
        cookieManager.setAcceptThirdPartyCookies(view.webView, true)
    } else {
        cookieManager.setCookie(domain, "token=$token")
        view.webView.loadUrl(url)
    }
} else {
    // Check whether we're recreating a previously destroyed instance.
    view.webView.restoreState(savedInstanceState)
}

-4

আপনার কাঁচা ইউআরএল ব্যবহার করবেন না

পরিবর্তে:

cookieManager.setCookie(myUrl, cookieString); 

এটি এর মতো ব্যবহার করুন:

cookieManager.setCookie("your url host", cookieString); 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.