为了进行测试,我从网上下载了图像,并使用chrome中的valum文件上传... chrome未与这些请求标头一起发送会话cookie(我在服务器端看不到,尽管我在开发人员工具上看到了它) chrome知道这些图片来自不同的域吗?发生了什么...是否可以解决这个问题,以通过会话ID(作为Cookie)。 IE10中也发生了这种情况,这使我相信它是某种标准。不仅是铬问题。 Firefox / Safari / Opera不存在此问题
上传到本地主机时很好。仅当使用域名上传到其他服务器时,此问题才导致为此创建新会话。
更新:我添加了xhr.withCredentials = true仍然没有用。还在服务器端添加到了上载网址...
res.setHeader 'Access-Control-Allow-Origin', '*'
res.setHeader 'Access-Control-Allow-Credentials', true
我不知道这会有多大用处,因为我已经发送了上传文件,响应头没有多大帮助。
基本上,问题是我无法访问服务器端的会话变量,因为会话ID / SID Cookie不会返回/我无法将某些上传详细信息保存到当前会话中(因为这是一个新的会话)。
更新:我尝试在桌面上使用paint创建图像。即使chrome,也不会发送cookie。真让我发疯...
很难确切猜测正在发生什么,本来可以帮助您了解jsfiddle或更多设置说明,但是根据我的猜测,您可能在托管上传按钮的页面使用了不同的域,您将文件发送到的目标网址(即使其中一个使用ssl,另一个使用http也会使它与众不同)。如果未使用基本域(yourdomain.com)设置cookie,则即使是不同的子域也不允许传递cookie。
因此,如果子域存在问题,您就知道该怎么做-设置基本域,以使Cookie可以在任何子域中使用。如果是http还是https,则您必须始终使用https(或http),因为您无法在这两者之间切换cookie。
如果不是,或者您使用的是完全不同的域,则可以通过脚本在本地访问Cookie(如果未将它们仅标记为http),并将其添加到上传请求中。 Valum 2.0(不了解v1.0)可让您向请求中添加参数,如下所示:
var uploader = new qq.FileUploader({
element: document.getElementById('file-uploader'),
action: '/server-side.upload',
// additional data to send, name-value pairs
params: {
param1: 'value1',
param2: 'value2'
}
});
您不能通过脚本在不是页面域的域上设置cookie,因此要使用完全不同的域,您唯一的选择是使用请求参数。