CORS $.ajax会话cookie(access-control-allow-credentials&withCredentials = true)

我意识到这个问题已经被问过十几次了,每个回答都表明我做得对,但也许我错过了一些东西.

AJAX像这样提供CORS请求……

$.ajax({
url: 'someotherdomain.com',type: 'post',data: {key: 'value'},dataType: 'json',async: false,crossDomain: true,beforeSend: function(xhr){
    xhr.withCredentials = true;
},success: function(x,status,xhr){

},error: function(xhr,error){

}
});

PHP提供如此的CORS请求……

header('Access-Control-Max-Age: 1728000');
header('Access-Control-Allow-Origin: http://someotherdomain.com');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Allow-Headers: Content-MD5,X-Alt-Referer');
header('Access-Control-Allow-Credentials: true');
header("Content-Type: application/json; charset=utf-8");

根据所有文档,只要“Access-Control-Allow-Credentials”服务器端标头和“withCredentials = true”客户端标头设置,域之间的会话cookie处理应该是透明的.我错过了什么吗?

async: false

阻止会话cookie在每个请求上被发送回服务器.以下修复了它.

async: true

虽然这确实允许浏览器在进行跨源请求共享调用时设置会话cookie,但我现在遇到以下情况的问题:

服务器A向客户端发送响应
使用CORS的客户端发出服务器B的请求

XMLHttpRequest -> PHP -> Session handler -> MysqL -> Stored Procedure

由于PHP会话管理中的MUTEX锁定,异步性质和显然,要求可能会强制解决使用不同的头选项(如XCookie或类似的东西)手动设置cookie以保持服务器会话和客户端请求同步.

这个特殊的工作并不适合我,因为我相信它会为会话劫持和会话重播攻击向量打开一个简单的旅行通道.

使用SSL / TLS包装的连接可能有助于防止上述情况,但就为客户端独立提供安全措施而言,我认为这不足以满足要求.

对此有何想法的人?

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...