【问题标题】:How to use cookie that maintains session in Android client?如何使用在 Android 客户端中维护会话的 cookie?
【发布时间】:2014-11-10 13:16:32
【问题描述】:

关于 Cookie 类的文档中写道:“Cookie,HTTP “magic-cookie”表示 HTTP 代理和目标服务器可以交换以维持会话的一条状态信息。”但是如何使用这个魔法呢?有谁能告诉?具体来说,我想使用 cookie 来维护浏览器端的会话。怎么做?

【问题讨论】:

    标签: android session-cookies


    【解决方案1】:

    尝试下面的代码来维护 cookie,它对我来说工作正常:-

                CookieStore cookieStore = new BasicCookieStore();
    
                // Create local HTTP context
                HttpClientContext localContext = HttpClientContext.create();
                // Bind custom cookie store to the local context
                localContext.setCookieStore(cookieStore);
    
                HttpGet httpget = new HttpGet("http://localhost/");
                System.out.println("Executing request " + httpget.getRequestLine());
    
                // Pass local context as a parameter
                CloseableHttpResponse response = httpclient.execute(httpget, localContext);
                try {
                    System.out.println("----------------------------------------");
                    System.out.println(response.getStatusLine());
                    List<Cookie> cookies = cookieStore.getCookies();
                    for (int i = 0; i < cookies.size(); i++) {
                        System.out.println("Local cookie: " + cookies.get(i));
                    }
                    EntityUtils.consume(response.getEntity());
                } finally {
                    response.close();
                }
    

    【讨论】:

    • 对不起,没有HttpClientContext这样的类。
    【解决方案2】:

    从 Http 请求中得到响应后,只需添加以下代码:

    public static List<Cookie> cookies;
    try {
            cookies = httpclient.getCookieStore().getCookies();
            sync();
        } catch (Exception e) {
        }
    
    //Sync Method:
    
        public void sync() {
                if (cookies != null) {
    
                    CookieManager cookieManager = CookieManager.getInstance();
                    cookieManager.setAcceptCookie(true);
                    for (Cookie cookie : cookies) {
    
                        Cookie sessionInfo = cookie;
                        String cookieString = sessionInfo.getName() + "=" + sessionInfo.getValue() + "; domain=" + sessionInfo.getDomain();
                        cookieManager.setCookie(YOUR DOMAIN, cookieString);
                        CookieSyncManager.getInstance().sync();
                    }
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2011-03-03
      • 2020-07-29
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 2014-08-16
      相关资源
      最近更新 更多