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