Javascript 带有凭据的AngularJS未发送

Javascript 带有凭据的AngularJS未发送,javascript,php,ajax,angularjs,cors,Javascript,Php,Ajax,Angularjs,Cors,在AngularJS中,我的Restful API位于子域中,但我遇到了一个问题,即cookie/会话没有在域之间共享。因为我正在这样做: app.config(['$httpProvider', function($httpProvider) { $httpProvider.defaults.useXDomain = true; $httpProvider.defaults.withCredentials = true; delete $httpProvider.def

在AngularJS中,我的Restful API位于子域中,但我遇到了一个问题,即cookie/会话没有在域之间共享。因为我正在这样做:

app.config(['$httpProvider',
function($httpProvider) {
    $httpProvider.defaults.useXDomain = true;
    $httpProvider.defaults.withCredentials = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);
当我使用$http发出请求时,我也在执行

var object = {};

object.url = '/example'
object.withCredentials = true;

$http(object).success(object.success).error(object.error);
在我的服务器端,我有:

if($_SERVER['REQUEST_METHOD']=='OPTIONS') {
    if(isset($_SERVER['HTTP_X_FOWARDED_HOST']) && !empty($_SERVER['HTTP_X_FOWARDED_HOST'])) {
        $origin=$_SERVER['HTTP_X_FOWARDED_HOST'];
    } else {
        $origin=$_SERVER['HTTP_ORIGIN'];
    }
    if(isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']) && ($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='POST' || $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='DELETE' || $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='PUT')) {
        header('Access-Control-Allow-Origin: '.$origin);
        header('Access-Control-Allow-Credentials: true');
        header('Access-Control-Allow-Headers:  *,X-Requested-With,Content-Type');
        //header('Access-Control-Allow-Headers: Content-Type');
        header('Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT');
        // http://stackoverflow.com/a/7605119/578667
        header('Access-Control-Max-Age: 86400');
    }

}
现在我看到服务器说它将允许凭据,但在选项请求中不发送凭据。下面是截图


我做错了什么?

默认情况下,凭证不会在CORS飞行前选项请求中发送。另见此。凭据将根据您的实际请求发送

此外,useXDomain和X-Request-With头文件实际上并未在当前版本的angular中使用,因此这些行在$httpProvider配置中没有任何作用。所有CORS交互都由浏览器本身和服务器处理

一般来说,要正确实现CORS,您的服务器在飞行前请求中不需要凭据。(请注意,有些浏览器无论如何都会发送,但不应该发送。)这是因为选项请求被认为是“安全的”,不应该包含任何机密信息


您的问题可能在于您试图跨域共享的cookie。您要将哪些cookie发送到哪里?

我已设置SSO cookie分配。所以我通过在会话id检查之前检查CORS选项来解决这个问题。如果是选项,则不运行SSO的会话id检查。否则,使用发送的cookie。