【发布时间】:2012-03-20 15:38:27
【问题描述】:
我目前正在开发一个移动应用程序,该应用程序将通过 HTTP 协议与 RESTfull 服务器进行通信。为此,我编写了一个工作代码并让通信正常工作。
为了让服务器识别用户,我想使用 cookie(某种会话 cookie)。所以我开始使用以下两个帮助方法来创建一个 HttpClient 和一个上下文(包括我的 cookie)。
// Gets a standard client - set to HTTP1.1
private HttpClient getClient() {
HttpParams params = new BasicHttpParams();
params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
return new DefaultHttpClient(params);
}
// Gets the context with cookies to be used. This is to make each user unique
private HttpContext getHttpContext(String server) {
CookieStore cookieStore = new BasicCookieStore();
BasicClientCookie cookie = new BasicClientCookie("X-ANDROID-USER", "some name");
cookie.setDomain(server);
cookie.setPath("/");
cookie.setVersion(1);
cookieStore.addCookie(cookie);
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
return localContext;
}
然后我使用以下(读取功能)连接到服务器。这基本上需要最后两个辅助方法生成的 Client 和 Conext 并执行正常的 GET 请求。
// 连接restfull服务器并返回返回值(get request)
当我将它运行到我的服务器时,我收到以下请求。
获取 /info/1 HTTP/1.1
主机:192.168.0.191:8080
连接:保持活动状态
如您所见,这不包括任何 cookie。这就是为什么我想知道,为什么“getHttpContext”中制作的cookie没有在请求中发送?
【问题讨论】:
-
为什么不向客户端应用程序发送一个唯一令牌。此令牌标识用户并将随每个请求一起发送到服务器?
-
可能有点不清楚,代码有点简单——我尝试发送一个名为“X-ANDROID-USER”的cookie,其值为“some name”,以便服务器。当我完成这项工作时,我会将“某个名称”更改为唯一值。
标签: java android apache cookies httpclient