我正在寻找使用 aQuery 保持会话的能力,这从第一个 HTTP 请求开始。我正在获取 cookie 并存储它们,但是如何将它们添加到新请求中,以便服务器将知道具有相同会话的同一用户试图访问 web 服务?
我在ajax请求之前尝试了类似的方法(cookie保存Cookie对象,回调保存AjaxCallback对象):
Map<String, String> cookieMonster = new HashMap<String, String>();
cookieMonster.put("domain", cookie.getDomain());
cookieMonster.put("version", "" + cookie.getVersion());
cookieMonster.put("path", cookie.getPath());
cookieMonster.put("name", cookie.getName());
cookieMonster.put("value", cookie.getValue());
cookieMonster.put("expiry", cookie.getExpiryDate().toGMTString());
然后
callback.cookies(cookieMonster);
我也设置
AjaxCallback.setReuseHttpClient(true);
但看起来在 android 查询中有一些问题,它的行为不像我预期的那样。
有人解决了这个问题吗?我会在每个请求中使用发送令牌作为参数,但我需要正确计算会话,而不是在每个请求中重新创建它们。
提前感谢您的帮助!
问候,大卫
更新
事实上,我非常接近解决方案。这是我在另一个回调之前使用的工作方法,其中静态方法getCookie
保存来自先前回调的 cookie 列表(我使用UserData.setCookie(status.getCookie()将其从先前的回调中保存)。
private void setCookie(AjaxCallback<JsonElement> callback) {
try {
List<Cookie> cookies = UserData.getCookie();
for (Cookie cookie : cookies) {
Map<String, String> cookieMonster = new HashMap<String, String>();
cookieMonster.put("domain", cookie.getDomain());
cookieMonster.put("version", "" + cookie.getVersion());
cookieMonster.put("path", cookie.getPath());
cookieMonster.put("name", cookie.getName());
cookieMonster.put("value", cookie.getValue());
if (cookie.getExpiryDate() != null) {
String DATE_FORMAT = "EEE, dd-MMM-yyyy HH:mm:ss z";
final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
String dateTimeString = sdf.format(cookie.getExpiryDate());
cookieMonster.put("expiry", dateTimeString);
}
callback.cookie(cookie.getName(), cookie.getValue());
Log.d("Set cookie from UserData", cookie.toString());
}
} catch (Exception e) {
Log.d("Aq setCookie problem", "message: " + e.getMessage());
}
}