我正在使用 $http(Angular) 并向我无法控制的远程网站发布文章。
在登录时,它会给我一个“site_session” cookie,我想读取它。 请注意,由于运行于移动设备上的 Cordova 应用程序中,因此我能够调用远程网站(跨域)。
我尝试了各种在网上找到的解决方案,但没有成功。
我正在使用 Angular 1.3.13,因此应该可以在 $timeout 后使用 $cookies,但实际上不行。
我尝试了 withCredentials = true 技巧,既在 $httpProvider.defaults 中,也在 $http 调用的 config 中自己设置:都不行。 $cookies 似乎在每个作用域内都会死亡并重置。
例如:
在登录时,它会给我一个“site_session” cookie,我想读取它。 请注意,由于运行于移动设备上的 Cordova 应用程序中,因此我能够调用远程网站(跨域)。
我尝试了各种在网上找到的解决方案,但没有成功。
我正在使用 Angular 1.3.13,因此应该可以在 $timeout 后使用 $cookies,但实际上不行。
我尝试了 withCredentials = true 技巧,既在 $httpProvider.defaults 中,也在 $http 调用的 config 中自己设置:都不行。 $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: Object {myTest1: "test1"}
过期后的cookies: Object {myTest2: "test2"}
我只得到了最后一个设置的cookie,而没有任何真正的cookie…
我已经没有任何解决方案了。有人能提供一种有效的方法来从Angular在Cordova应用程序中调用远程(跨域)站点的cookie吗?
如果可能,我希望保留$http,但只要它可以从客户端(浏览器)工作即可使用其他东西。
Set-Cookie
头信息。我认为你可以直接解析这个头信息。 - David S.Set-Cookie
,这可能是因为出于安全考虑或者在成功登录后实际上跟随重定向到另一个页面时被移除了,最后一次调用没有Set-Cookie
标头。 - Thomas