首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Android-query & AjaxCallback设置cookie

使用Android-query & AjaxCallback设置cookie
EN

Stack Overflow用户
提问于 2013-12-26 14:33:11
回答 2查看 1.6K关注 0票数 2

我正在寻找使用aQuery进行会话的能力,从第一个HTTP请求开始。我正在获取和存储cookie,但是如何将它们添加到新的请求中,这样服务器就可以知道同一个用户使用相同的会话试图访问webservice?

我尝试过这样的方法,在ajax请求之前(cookie持有Cookie对象,回调包含AjaxCallback对象):

代码语言:javascript
复制
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());

然后

代码语言:javascript
复制
callback.cookies(cookieMonster);

我也设置了

代码语言:javascript
复制
AjaxCallback.setReuseHttpClient(true);

但是看起来在android查询中存在一些问题,而且它的行为并不像我预期的那样。

有人解决了这个问题吗?我将在每个请求中使用发送令牌作为param,但我需要正确地计数会话,而不是在每个请求中重新创建它们。

提前感谢您的帮助!

你好,大卫

更新

事实上,我非常接近解决方案。下面是我在另一个回调之前使用的工作方法,静态方法getCookie保存来自以前回调的cookie列表(我使用getCookie将其保存在以前的回调中)。

代码语言:javascript
复制
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());
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-26 05:29:39

谢谢你的研究,我正在寻找同样的问题,因为我想保持PHP会话。我认为AQuery应该能够自行处理cookie,我仍然不明白为什么我们必须在回调中而不是在AQuery实例中设置cookie。否则,我们必须在任何需要处理cookie的时候使用AjaxCallback :-/

顺便说一句,这是另一个基于你的研究的样本。首先,我们需要一个变量来保存cookie信息:

代码语言:javascript
复制
List<Cookie> cookies;

接下来,我们进行JSON调用:

代码语言:javascript
复制
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数据之后,我们可以在下一个请求中使用它:

代码语言:javascript
复制
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);

再次感谢波林斯基。

票数 2
EN

Stack Overflow用户

发布于 2015-06-01 10:03:44

这将不适用于图像,因为然后在代码中直接实例化BitmapAjaxCallback .

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20786545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档