Cookies 使用XMLHTTPRequest(TVMLJS)发送cookie

Cookies 使用XMLHTTPRequest(TVMLJS)发送cookie,cookies,xmlhttprequest,tvml,tvjs,Cookies,Xmlhttprequest,Tvml,Tvjs,我正在为我的AppleTV开发一个应用程序。该应用程序将从一个尚未开发任何此类API的在线网站上读取电影 我使用XMLHTTPRequest获取不同的URL,并让用户搜索他的电影,等等。。。除了一个请求外,一切正常。要获取电影URL,我必须使用一个常量cookie(比如mycokie=cookie)将get请求发送到特定地址(比如说) 我已尝试使用setRequestHeader: var xhr = new XMLHttpRequest(); xhr.open("GET", url, fals

我正在为我的AppleTV开发一个应用程序。该应用程序将从一个尚未开发任何此类API的在线网站上读取电影

我使用XMLHTTPRequest获取不同的URL,并让用户搜索他的电影,等等。。。除了一个请求外,一切正常。要获取电影URL,我必须使用一个常量cookie(比如mycokie=cookie)将get请求发送到特定地址(比如说)

我已尝试使用setRequestHeader:

var xhr = new XMLHttpRequest();
xhr.open("GET", url, false);
xhr.withCredentials = true;
xhr.setRequestHeader('Cookie', 'mycookie=cookie');
xhr.send();
但似乎没有发送任何cookie。 我还尝试使用Document.cookie设置cookie,就像我在“正常”js脚本(在我的浏览器中运行)中所做的那样,但也没有成功

这是非常令人沮丧的,尤其是因为我被困在如此接近我的应用程序结束

我想跨源可能是个问题,但如果我不必设置cookie,我就可以获得没有问题的URL,所以我有点迷失了方向

请让我知道如何使用特定的cookie头


感谢您的帮助

很抱歉通知您,出于安全原因,javascript的xmlHTTPRequest函数不允许设置cookie头,如下所示:我看到您发出get请求的最佳方式是向您将运行的代理服务器发送请求。我相信它是以这种方式构建的,以防止您在您不拥有的域上设置cookie,此外,我没有看到解决此问题的替代方法,因为我查看的文档中没有提到cookie持久性或管理,以防有人有相同的问题:

我没有找到用javascript发送cookie的解决方案。然而,在我的情况下,请求的来源并不重要,只有cookie才重要。然后,我的解决方案是创建一个PHP文件,接收目标URL和cookie内容作为参数,然后发送get请求和cookie作为请求头。(有关如何执行此操作的详细信息,请参见此处:)


在javascript中,我使用XMLHttpRequest通过简单的get参数连接到我的PHP文件(在线托管),然后从PHP接收响应。如果请求的来源很重要,那么这个技巧当然不起作用(我想如果您在家中托管文件,则除外,但在我的情况下,即使我的WAMP未打开,我也希望我的应用程序能够工作)。

Cordova如何发送会话cookie,允许使用XMLhttprequest的凭据:

// JS
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/ajax.php', true);
xhr.withCredentials = true;
xhr.onreadystatechange = function() {
    if(xhr.readyState == 4 && xhr.status == 200) {
        // alert(xhr.responseText);
        // Get header from php server request if you want for something
        var cookie = xhr.getResponseHeader("Cookie");
        // alert("Cookie: " + cookie);
    }
}
xhr.send();

// Php 
// You can add cookie to header and get with (session works without it) 
header('Cookie: PHPSESSID='.$_COOKIE['PHPSESSID']);
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Request-With, Set-Cookie, Cookie, Bearer');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400');

嗯。。。这里的问题是行
xhr.setRequestHeader('Cookie','mycokie=Cookie')行,因为“Cookie”头是为客户端浏览器保留的,用于发送存储的Cookie。这意味着您正在尝试执行浏览器已经执行的操作。当您发送任何请求时,客户端浏览器将自动获取与您请求的站点相关的所有Cookie,并将它们放在“Cookie”标题上,如果浏览器中存在Cookie,则无需执行任何其他操作,它将被发送。

此问题的解决方案是将cookie编码到请求的URL中,作为代理服务器的参数,从而绕过
XMLHttpRequest
头的安全性

例如:

xhr.open("GET", url+’?’+encodeURI(document.cookie), false);
document.location.href = url;
只要您的代理在根URI处打开,它就可以拦截会话cookie(可以使用
decodeURI
进行解析)

如果您让浏览器执行请求,而不是
XMLHttpRequest
(但是在同一TLD中),您也可以自动发送cookie头-但是这对UX来说不是很好,但是如果您不执行COR,我将其作为一种替代方法来显示。之所以可以工作,是因为浏览器没有cookie头的限制

例如:

xhr.open("GET", url+’?’+encodeURI(document.cookie), false);
document.location.href = url;

我很抱歉地通知您,由于安全原因,javascript的xmlHTTPRequest函数不允许设置cookie头,如下所示:我看到您发出get请求的最佳方式是向您将运行的代理服务器发送感谢。那么,还有其他方法可以使用cookie执行对url的get请求吗?也许使用的不是xmlHTTPRequest?这种安全措施看起来真是太过分了。。。从我在其他帖子上看到的情况来看,我认为安全性来自浏览器。但就我而言,没有浏览器,由于它是一个appleTV应用程序。它可能内置于xmlhttprequest规范中,如果您可以控制要向其发送请求的服务器,并且能够修改响应头,则可以使用cookieSadly发出xmlhttp请求。我无法控制要向其发送请求的服务器。。。我觉得很奇怪,我不能用javascript发送cookie,特别是因为用浏览器发送伪造的cookie非常容易(检查元素/网络/修改并重新发送请求/添加cookie)。如果发送任意cookie真的是一个安全问题,那么这是不可能的(或者整个互联网现在会有一个巨大的问题^^),因此如果我的问题没有解决方案,我会非常惊讶。感谢您抽出时间回答我的问题:)没问题,但我认为您不能使用javascript发送cookie的原因并不是为了阻止您在您控制的机器上发送伪造的cookie,而是为了防止您在自己的网站上放置javascript,从而允许您在其他人的机器上为您不拥有的域设置cookie。例如,假设您正在运行一个博客,在后台的每个页面上,都会使用错误的会话cookie对竞争对手的博客进行xmlhttprequest,这将有效地将用户从竞争对手的站点注销。如果可能,我可以为分数写一个答案吗?你错了,
XMLHttpRequest
没有将与请求站点相关的Cookie放入
Cookie
标题中。至少这不是默认的行为,Ori没有说XMLHttpRequest自己添加Cookie头,但浏览器会这样做:浏览器也不会这样做。如果它这样做,那将是一个安全漏洞。我建议