使用 XMLHTTPRequest (TVMLJS) 发送 cookie

send a cookie with XMLHTTPRequest (TVMLJS)

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

我使用 XMLHTTPRequest 获取不同的 URLs 并让用户搜索他的电影等...一切正常,除了一个请求。要获取电影 URL,我必须使用常量 cookie(假设 mycookie=cookie)向特定地址(假设 http://example.com/getmovie.html)发送获取请求。

我试过使用 setRequestHeader:

var xhr = new XMLHttpRequest();
xhr.open("GET", url, false);
xhr.withCredentials = true;
xhr.setRequestHeader('Cookie', 'mycookie=cookie');
xhr.send();

但是好像没有发送cookie。 我还尝试使用 Document.cookie 设置 cookie,就像我可能在 "normal" js 脚本(在我的浏览器中是 运行)中所做的那样,但也没有运气。

这非常令人沮丧,尤其是因为我的应用程序快要结束了。

我想 cross-origin 可能是问题所在,但如果我不必设置 cookie,我可以毫无问题地获得 URLs,所以我有点迷路了。

请告诉我如何使用特定的 cookie header 获取 http://example.com/getmovie.html

感谢您的帮助

很抱歉通知您,但出于安全原因,javascript 的 xmlHTTPRequest 函数不允许设置 cookie header,如下所示:Why cookies and set-cookie headers can't be set while making xmlhttprequest using setRequestHeader? 我能做的最好的方法看到你发出的 get 请求将发送到代理服务器,你将是 运行。我相信它是以这种方式构建的,以防止您在不属于您的域上设置 cookie,此外,我没有看到此问题的替代解决方案,因为在我查看的文档中没有提到 cookie 持久性或管理

如果有人遇到同样的问题:

我没有找到使用 javascript 发送 cookie 的解决方案。但是,在我的情况下,请求的来源并不重要,只有 cookie 才重要。然后我的解决方案是创建一个 PHP 文件接收目标 URL 和 cookie 内容作为参数,然后发送带有 cookie 的 get 请求作为请求 header。 (有关如何操作的更多信息,请点击此处:PHP GET Request, sending headers)。

然后,在我的 javascript 中,我使用 XMLHttpRequest 通过简单的获取参数连接到我的 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', 'mycookie=cookie'); 行只是因为 'Cookie' header 保留给客户端浏览器发送存储的 cookie。这意味着您正在尝试执行浏览器已经执行的操作。当您发送任何请求时,客户端浏览器会自动获取与您请求的站点相关的所有 cookie 并将它们放在 'Cookie' header 上,您无需执行任何其他操作,如果您的浏览器中存在您的 cookie,它将被发送。