1

我们有一个 django 框架设置,并且 django 中的登录正在工作。我们需要在 android 上获取这个 session-id,我不确定我们如何做到这一点。因此,如果我们从 android 发布 http 帖子,我们需要来自 django 的会话 id,我们可以将其用于未来的帖子并从该用户获取请求。

4

1 回答 1

1

要实现这一点,您需要维护会话。并且要保持会话有两种可能性

1)对所有请求使用单个 DefaultHttpClient

如果您想同时调用多个请求,这种方法将不起作用。

2) 在多个 DefaultHttpClient 连接之间同步公共 cookie。

public static List<Cookie> cookies;

登录后读取会话 cookie。

HttpResponse WSresponse = httpclient.execute(httppost);


                try {
                    cookies = httpclient.getCookieStore().getCookies();
                    sync();
                } catch (Exception e) {
                }

public static DefaultHttpClient getHttpclient() {

        HttpParams httpParameters = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParameters, timeOut);
        HttpConnectionParams.setSoTimeout(httpParameters, timeOut);
        DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters);

        if (cookies != null) {
            int size = cookies.size();
            for (int i = 0; i < size; i++) {
                httpclient.getCookieStore().addCookie(cookies.get(i));
            }
        }
        return httpclient;
    }

更新:

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("http://yourdomain.com", cookieString);
                CookieSyncManager.getInstance().sync();
            }
        }
    }

sync()方法用于管理 httpclient 和 webview/browser 的会话。也就是说,如果您想执行一些操作,例如从本机应用程序登录,并希望在 webview 上进行一些需要登录的特定操作-此方法将管理应用程序和 webview/浏览器之间的公共会话。

于 2013-08-24T05:58:23.250 回答