使用Android查询和AjaxCallback设置Cookie

poslinski.net

我正在寻找使用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());
        }
    }
Noisedan

感谢您的研究,我一直在寻找相同的问题,因为我想保留一个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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Android查询和AjaxCallback设置Cookie

来自分类Dev

在Pedestal中设置和使用基于cookie的会话

来自分类Dev

使用Cookie通过Javascript设置用户名和密码

来自分类Dev

使用Angular 1.2在cookie中设置和获取对象

来自分类Dev

在Pedestal中设置和使用基于cookie的会话

来自分类Dev

使用Javascript设置Cookie

来自分类Dev

使用GWT设置Cookie

来自分类Dev

使用NSURLSession设置cookie

来自分类Dev

Angular 使用 CORS 忽略设置 Cookie 和删除 Cookie 标头

来自分类Dev

如何设置和获取Cookie

来自分类Dev

如何使用C和G-wan Web服务器设置和读取Cookie

来自分类Dev

使用会话值设置Cookie

来自分类Dev

使用Javascript设置多个Cookie

来自分类Dev

使用Ajax请求设置Cookie

来自分类Dev

使用表单输入设置Cookie

来自分类Dev

未使用HttpUrlConnection设置的Cookie

来自分类Dev

使用path = /的Javascript设置cookie

来自分类Dev

如何在vuejs和vuex中使用httponly标志设置cookie,该cookie来自服务器(Laravel)

来自分类Dev

VLeat Kdtree设置和查询

来自分类Dev

在Flask和JS中设置Cookie

来自分类Dev

NodeJ和ExpressJ无法设置Cookie

来自分类Dev

无法在jquery中设置和获取cookie

来自分类Dev

session_destroy和cookie过期后无法设置cookie

来自分类Dev

Cookie未在Safari和iOS中设置,但可以在ff,chrome中使用

来自分类Dev

使用一个名称和多个值在codeigniter中设置cookie

来自分类Dev

使用laravel 5发送重定向和设置cookie

来自分类Dev

如何使用webdriver和Chrome在localhost上可靠地设置cookie?

来自分类Dev

无法在ASP.NET MVC下使用C#设置和获取Cookie

来自分类Dev

使用 Facebook 登录、Passport、Express、React 和 Node 时没有设置用户 cookie

Related 相关文章

热门标签

归档