我正在寻找使用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());
}
}
感谢您的研究,我一直在寻找相同的问题,因为我想保留一个PHP会话。我认为AQuery应该能够自行处理cookie,但我仍然不明白为什么我们必须在回调而不是AQuery实例中设置cookie。否则,在需要处理cookie的任何时候,我们都应被迫使用AjaxCallback:-/
顺便说一句,这是根据您的研究得出的另一个示例。首先,我们需要一个变量来保存cookie信息:
List<Cookie> cookies;
接下来,我们进行JSON调用:
AQuery query = new AQuery(this);
query.ajax("your url", JSONObject.class, new AjaxCallback<String>() {
@Override
public void callback(String url, String json, AjaxStatus status) {
cookies = status.getCookies(); // We are saving the cookies in our variable
}
});
保存cookie数据后,我们可以在下一个请求中使用它:
AQuery query = new AQuery(this);
AjaxCallback<JSONObject> ajaxCallback = new AjaxCallback<JSONObject>() {
@Override
public void callback(String url, String json, AjaxStatus status) {
cookies = status.getCookies(); // Save the cookies in every requests you made
}
}
for (Cookie cookie : cookies) {
ajaxCallback.cookie(cookie.getName(), cookie.getValue());
//Here we are setting the cookie info.
}
query.ajax("your url", JSONObject.class, ajaxCallback);
再次感谢poslinski。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句