在SharedPreferences中存储Cookie

6
我一直在苦苦思考:我正在使用java.net.cookiemanager管理我的cookie(据我所知,无法将android.webkit.cookiemanager用于HttpUrlConnection/HttpsUrlConnection),并创建了一个HttpsURLConnection。我需要保存我的长期cookie以供以后的连接使用。
不幸的是,我不能使用http://loopj.com/android-async-http/及其PersistentCookieStore,因为我需要允许不受信任的证书(使用http://abhinavasblog.blogspot.se/2011/07/allow-untrusted-certificate-for-https.html)。我尝试过仅使用他们的PersistentCookieStore,但他们使用的是apache cookies,而我使用的是java.net cookies...
这是我尝试过的内容:
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();
            }
        }
    }
}

当我在下一次应用程序启动时检索cookie:

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,但服务器未识别。我认为存在某种解析问题。有人有解决方案吗?

2个回答

0
看了你的代码后,我可能错了,但是你似乎没有完全存储cookie。
for (int i = 0; i < cookies.size(); i++) {
           if(cookies.get(i).getName().equals("rememberMe")){
               editor.putString("rememberMe", cookies.get(i).toString());
               editor.commit();
           }
       }

使用 cookies.size() 获得 cookies 的 List 长度,然后循环并获取所有 cookies,但是您提交保存键值 "rememberMe" 而不是将其附加或存储在单独的键中。因此,基本上,您只是一遍又一遍地覆盖了您已经存储的内容。


0
我使用了这个部分:
        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中以供以后使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接