gpt4 book ai didi

android - 使用 Android 查询和 AjaxCallback 设置 cookie

转载 作者:行者123 更新时间:2023-11-29 00:24:24 24 4
gpt4 key购买 nike

我正在寻找使用从第一个 HTTP 请求开始的查询来保持 session 的能力。我正在获取 cookie 并存储它们,但如何将它们添加到新请求中,以便服务器知 Prop 有相同 session 的同一用户试图访问网络服务?

我在 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 查询中有一些问题,它的行为并不像我预期的那样。

有人解决过这个问题吗?我会在每个请求中使用发送 token 作为参数,但我需要正确计算 session ,而不是在每个请求中重新创建它们。

在此先感谢您的帮助!

问候,大卫

更新

事实上,我已经非常接近解决方案了。这是我在另一个回调之前使用的工作方法,其中静态方法 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 session 。我认为 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);

再次感谢波斯林斯基。

关于android - 使用 Android 查询和 AjaxCallback 设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20786545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com