cordova - 从 XHR 请求/响应中读取/写入 cookie (PhoneGap/Cordova)

标签 cordova http cookies xmlhttprequest phonegap-plugins

我正在使用 $http(角度)并发布到我无法控制的远程网站。
登录时,它会给我一个我想阅读的“site_session”cookie。 请注意,我能够调用远程网站(跨域),因为它在移动设备上运行,在 Cordova 应用程序中。

我尝试了网上找到的各种解决方案,但都没有成功。
我使用的是 Angular 1.3.13,所以 $timeout 之后的 $cookies 应该可以工作,但没有。
我在 $httpProvider.defaults 和 $http 调用的配置本身中尝试了 withCredentials = true 技巧:运气不好。

$cookies 似乎在每个范围内死亡并重置。

例如:

$http({
    method: 'POST',
    url: 'http://distantsite.com/login.php',
    data: 'username=test&password=test',
    headers: {
      'Accept': 'text/html',
      'Cookie': "site_session=abcd", // this will be blocked: refused to set unsafe header
      'Content-Type': 'application/x-www-form-urlencoded',
      'Access-Control-Allow-Credentials': true,
    },
    withCredentials: true,
}).success(function(response, status, headers){
    $cookies.myTest1 = 'test1';
    $log.info('cookies: ', $cookies); // Object {myTest1: "test1"} 
    $timeout(function(){
        $cookies.myTest2 = 'test2';
        $log.info('cookies after timeout: ', $cookies); // Object {myTest2: "test2"}, myTest1 has disappeared!
    });
});

输出:
cookies: 对象 {myTest1: "test1"}
超时后的 cookie:对象 {myTest2: "test2"}

我没有得到任何真正的 cookie,只有我设置的最后一个......

我完全没有解决方案。有没有人有有效的工作方式来检索 Cordova 应用程序中从 Angular 调用远程(跨域)站点的 cookie?
如果可能的话,我想为此保留 $http,但我不介意使用其他东西,只要它能在客户端(浏览器)运行即可。

最佳答案

我确认无论使用何种框架,Android 上 PhoneGap/Cordova 中的 JavaScript 的 XMLHttpRequest 对象都无法管理 cookie(因此不是角度问题)。
这似乎是一个功能,而不是一个错误,没有计划将 cookie 暴露给 JavaScript 端(cookie 管理的,但只是没有暴露给 Cordova 的 JavaScript 客户端。
iOS 上似乎有解决方法,但我无法确认。

我为 Android 找到的唯一解决方法是创建一个 Cordova 插件,该插件在本地执行 HTTP 调用(在 Android 上使用 java.net.*),允许访问 cookie 并将它们传回 JavaScript 端。
查看 Cordova 插件文档以获取更多详细信息:http://docs.phonegap.com/en/4.0.0/guide_hybrid_plugins_index.md.html

幸运的是,Cordova 插件非常容易设置并且非常强大,因为您可以获得所有 native 可能的功能。

关于cordova - 从 XHR 请求/响应中读取/写入 cookie (PhoneGap/Cordova),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30011315/

相关文章:

node.js - 让 Cordova/Phonegap 在 Genymotion 虚拟设备上进行仿真

Cordova相机插件多种源类型

jquery-mobile - 缩放不适用于 iPad/iOS 5 上的 PhoneGap

python - Google Analytics 数据提要 API 错误 414 URI 太大

http - 更改基本 HTTP 身份验证领域和登录对话框消息

javascript - 按名称删除 cookie?

cordova - Phonegap Build——无闪屏

python - 如何从 suds 请求中获取响应 header

javascript - Web 浏览器未在 Ajax 调用上设置 cookie

asp.net-mvc - session vs Cookie vs 自定义 IPrincipal