【问题标题】:Couldn't send cookies with AJAX cross-domain request in Phonegap无法在 Phonegap 中使用 AJAX 跨域请求发送 cookie
【发布时间】:2015-07-24 19:32:02
【问题描述】:

我有一个服务器,我正在尝试向其发送 cookie。我发送第一个 POST 请求,存储从响应标头接收到的 cookie,并尝试使用第二个 GET 请求来检索经过身份验证的用户只能访问的数据。跨域请求没问题,我可以在 Phonegap 应用程序中检索我的 cookie,但是在发送这些请求时,它会失败。请求标头不包含任何 cookie。 phonegap -v 返回5.1.1-0.29.0

我已经尝试过的:

  • 将域添加到白名单

  • 确保我保存的 cookie 根本不在服务器端的请求标头中

  • 通过 C# 发出相同的请求,以确保它不会是服务器端问题

请求代码:

$.ajax(
        {
            type: "GET",
            url: "url",
            xhrFields: {
                withCredentials: true
            },
            crossDomain: true,
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Cookie", mycookies);
            },
            success: function(data){
                console.log(data);
            },
            error: function (xhr) {
                console.log(xhr.responseText);
            }
        }
    );

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: jquery ajax cordova cookies cross-domain


    【解决方案1】:

    通过快速搜索,我了解到 Cordova 不保存 cookie,因此您必须改用本地存储。

    这里是示例:http://justbuildsomething.com/cordova-and-express-session/

    【讨论】:

    • 已经读过了,重点是发送cookie,而不是存储它们。
    • 如果 Cordova 无法存储 cookie,您应该将它们添加到 ajax 调用中。你尝试过 Hanh Le 的建议吗?应该工作。
    • Sharko,已经读过了。我最近一直在环顾四周,解决了写一个小代理的问题。谢谢。
    • @ShinyPhoenix 你能告诉我如何使用代理吗?是否有任何科尔多瓦插件可以重新发送收到的 cookie?谢谢
    【解决方案2】:

    在标题 ajax 中添加 cookie:

    $.ajax(
        {
            type: "GET",
            url: "url",
            xhrFields: {
                withCredentials: true
            },
            crossDomain: true,
            headers: {
              Cookie: mycookies
            },
            success: function(data){
                console.log(data);
            },
            error: function (xhr) {
                console.log(xhr.responseText);
            }
        }
    );
    

    【讨论】:

    • 这里Cookie: "test=test;",我的简单PHP脚本var_dump($_COOKIE);返回array(0)。那么,什么都没有。
    【解决方案3】:

    最终,Phonegap 似乎没有任何外部插件可以让您使用 cookie 标头执行跨域 AJAX 调用。愚蠢的。我已经通过编写一个小代理解决了,无法解决任何其他更好的解决方案。感谢任何试图提供帮助的人,我很感激。

    【讨论】:

      猜你喜欢
      • 2012-12-04
      • 1970-01-01
      • 2016-12-01
      • 2020-06-30
      • 2013-01-05
      • 2019-02-11
      • 2014-11-24
      • 2016-10-02
      • 2015-04-22
      相关资源
      最近更新 更多