在sharedpreferences存储的cookie(Store cookie in shared

2019-09-23 10:23发布

我一直在拉我的头发试图弄清楚这一点:我正在做一个HttpsURLConnection的使用java.net.cookiemanager来管理我的cookies(没有使用android.webkit.cookiemanager到HttpURLConnection类/ HttpsURLConnection的,因为我已经明白的方式吗? )。 我需要我的长期保存的Cookie以后的连接。

可悲的是我不能使用http://loopj.com/android-async-http/和它的PersistentCookieStore因为我需要让不可信证书(使用http://abhinavasblog.blogspot.se/2011/07/allow-untrusted -certificate换https.html )。 我使用他们的PersistentCookieStore孤独,但他们使用的是Apache饼干和我使用的java.net饼干试过...

这是我已经试过:

cManager = new CookieManager(null, CookiePolicy.ACCEPT_ALL);

private void setSharedPreferences(){
    List<HttpCookie> cookies = cManager.getCookieStore().getCookies();

    if (cookies.isEmpty()) {
        Log.d(tag,"no cookies received");
    } else {
        for (int i = 0; i < cookies.size(); i++) {
            if(cookies.get(i).getName().equals("rememberMe")) {
                editor.putString(
                        "rememberMe", cookies.get(i).toString());
                editor.commit();
            }
        }
    }
}

而当我取回与未来应用推出的饼干:

SharedPreferences sharedPreferences = context.getSharedPreferences("PREF_NAME", Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
String rememberString = sharedPreferences.getString("rememberMe", "none");

if (!rememberString.equals("none")) {
    Log.d("rememberME är inte", "none!");
    URI uriToCookie = null;
    try {
        uriToCookie = new URI("https://myservername.com");
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
    List<HttpCookie> cookieList = HttpCookie.parse(rememberString);
    cManager.getCookieStore().add(uriToCookie, cookieList.get(0));
}

该cookie被添加到cManager,但不被服务器识别。我相信有某种解析问题。 任何人都得到了解决?

Answer 1:

我用这个部分:

        cookies = ((AbstractHttpClient) httpClient).getCookieStore().getCookies();
        Log.v("Cookie:", cookies.toString());
        if (cookies.isEmpty()) {
        } else {
               for (int i = 0; i < cookies.size(); i++) {
                      if(cookies.get(i).getName().contentEquals("PHPSESSID")) {
                         PHPSESSID = cookies.get(i).getValue();
                      }
                   }
        }

只需使用contentEquals获得域名,让它与URS匹配和存储。 哦,我用PHPSESSID作为我在sharedprefs倾倒供以后的字符串



Answer 2:

看你的代码后,我的代码是错误的,但你根本不存储整个饼干:

for (int i = 0; i < cookies.size(); i++) {
           if(cookies.get(i).getName().equals("rememberMe")){
               editor.putString("rememberMe", cookies.get(i).toString());
               editor.commit();
           }
       }

你得到的List饼干的长度为cookies.size()和循环,得到所有的Cookie,但您提交保存键-值“与rememberMe”,而不是附加或单独的密钥存储。 所以基本上,你只是覆盖你存储什么了个遍。



文章来源: Store cookie in sharedpreferences