【问题标题】:How do I enable Third-Party Cookies under Phonegap and Android 3.2?如何在 Phonegap 和 Android 3.2 下启用第三方 Cookie?
【发布时间】:2012-01-11 14:46:47
【问题描述】:

我正在使用 $getJSON 来访问 Phonegap 和 Android 下的 node.js 端点。代码是这样的

$.getJSON(
    serverURL + "/login?callback=?",
    "playerId=" + playerId + "&pwd=" + pwd,
    function(data){
        theCallbackFunction.call(null, JSON.parse(data));
    },
    function(jqXHR, textStatus, errorThrown) {
            alert('error ' + textStatus + " " + errorThrown);
    }
);  

为了响应登录请求,我的服务器发回了一个会话 cookie。如果在浏览器中启用了“第三方 Cookie”,则此 cookie 仅在后续 AJAX 请求中被接受和返回。我发现旧的 Android 设备(例如 2.2)默认允许这样做,但新设备(3.2)不允许。

是否可以强制 Phonegap 为我的 Android 应用程序启用第三方 Cookie?

【问题讨论】:

标签: android jquery cordova


【解决方案1】:

我在尝试对我的服务器进行身份验证时遇到了类似的问题。我转而使用 localStorage。请参阅下面的代码或here

    var store = window.localStorage,
request = {
    url: {SERVER_URL},
    headers : {
        Cookie: store.getItem('session')
    },
    complete: function (jqXHR, status){
        if (status != 'success') {
            console.log('ajax status: failure');
        } else if (store.getItem('session') != null) {
            console.log('ajax status: session exists');
        } else {
            console.log('ajax status: saving cookie');
            var header = jqXHR.getAllResponseHeaders();
            var match = header.match(/(Set-Cookie|set-cookie): (.+?);/);
            if (match) {
                session = match[2];
                store.setItem("session", session);
            }
        }
    }
}
$.ajax(request);

在上面,我正在检查 localStorage 变量“会话”,如果它存在,它将发送存储的 cookie。如果不存在,则取服务端发送的headers中的'set-cookie'参数,匹配相关部分,保存在localStorage的'session'变量中。

【讨论】:

    【解决方案2】:

    Phonegap 不支持 cookie 抽象。从来没有真正需要,因为已经有应用程序/插件可以。另外,它旨在包装手机/设备的功能,而不是浏览器。但是,您可以使用 jQuery 插件来做到这一点。

    https://github.com/carhartl/jquery-cookie

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 2020-10-13
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多