正在上传图像-它们中是否包含域名-chrome未发送会话ID

问题描述 投票:1回答:2

为了进行测试,我从网上下载了图像,并使用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。真让我发疯...

javascript ajax google-chrome cookies
2个回答
0
投票
在某些情况下,上传者可能正在使用Flash进行上传。 Flash中存在一个错误,该错误可以阻止针对这些类型的请求发送Cookie。这可以解释您所看到的行为。解决方法是传入sessionId并以其他方式传输它,例如。查询字符串。

1
投票
首先,要使基础变得简单,这与图像的来源无关。 Chrome或其他浏览器不在乎图像的获取位置。

很难确切猜测正在发生什么,本来可以帮助您了解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,因此要使用完全不同的域,您唯一的选择是使用请求参数。
© www.soinside.com 2019 - 2024. All rights reserved.