在Android中跨越http调用维护会话

时间:2017-08-28 16:46:45

标签: java android apache session

在我的Android项目中,我使用旧的apache库进行网络操作。在那里,我使用HttpContext中的 BasicCookie()来维护https调用中的会话。现在谷歌已经弃用了Apache库,所以我转而使用URLConnection进行网络连接。但我不知道如何在HttpsUrlConnection中设置cookie来维持https调用的会话。如何在HttpURlConnection中设置相同的功能。

我从这篇文章中尝试了所有这些,但没有帮助。 How to handle cookies in httpUrlConnection using cookieManager

1 个答案:

答案 0 :(得分:1)

在Authentication类中创建一个CookieManager成员对象,以便以后在想要检索和使用cookie时可以从其他Activity访问它。

//In MyAuthentication class
static CookieManager mCookieManager = new CookieManager();
static String COOKIE_HEADER = "Set-Cookie";

//authentication code 
//...

int responseCode = urlConnection.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK){                
    Map<String, List<String>> headers = urlConnection.getHeaderFields();
    List<String> cookies = headers.get(COOKIE_HEADER);

    for(String cookie: cookies){
        HttpCookie httpCookie = HttpCookie.parse(cookie).get(0);
        mCookieManager.getCookieStore().add(null, httpCookie);
    }
}

在您要在帖子请求中设置检索到的Cookie的其他活动中。

CookieManger cookieManager = MyAuthentication.mCookieManager;

//authentication code
//...
if(mCookieManager.getCookieStore().getCookies().size() > 0) {
    urlConnection.setRequestProperty("Cookie",
    TextUtils.join(";", mCookieManager.getCookieStore().getCookies()));
}