web-dev-qa-db-ja.com

XMLHTTPRequest(TVMLJS)でクッキーを送信する

AppleTV用のアプリケーションを開発しています。アプリは、この種のAPIを開発していないオンラインWebサイトから映画を読み取ります。

XMLHTTPRequestを使用してさまざまなURLを取得し、ユーザーに彼の映画などを検索させています。単一の要求を除いて、すべてが正常に機能しています。映画のURLを取得するには、特定のアドレスにgetリクエストを送信する必要があります( http://example.com/getmovie.html としましょう)一定のcookieを使用して(mycookie = cookieとしましょう)。

私は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ヘッダーを使用して http://example.com/getmovie.html を取得する方法を教えてください。

ご協力いただきありがとうございます

7
Scaum

申し訳ありませんが、JavaScriptのxmlHTTPRequest関数では、次に示すように、セキュリティ上の理由からCookieヘッダーを設定できません。 setRequestHeaderを使用してxmlhttprequestを作成しているときに、Cookieとset-cookieヘッダーを設定できないのはなぜですか。 getリクエストを実行しているのを確認できる最善の方法は、実行しているプロキシサーバーに対するものです。私はあなたが所有していないドメインにCookieを設定できないようにこの方法で構築されていると思います。さらに、私が見たドキュメントにはCookieの永続性または管理が記載されていなかったため、この問題の代替解決策はありません

8
Mohammad Ali

誰かが同じ問題を抱えている場合:

JavaScriptでCookieを送信する解決策が見つかりませんでした。しかし、私の状況では、要求の起源は問題ではなく、Cookieのみが問題でした。私の解決策は、PHPファイルを作成し、宛先URLとCookieコンテンツをパラメーターとして受け取り、Cookieをリクエストヘッダーとして使用してgetリクエストを送信することでした(方法の詳細については、だからここ: PHP GETリクエスト、ヘッダーの送信 )。

私のJavaScriptでは、XMLHttpRequestを使用して、単純なgetパラメーターでPHPファイル(オンラインでホスト))に接続し、PHPから応答を受信します。このトリックは、もちろん、リクエストの発信元が重要です(自宅でファイルをホストしている場合を除きますが、私の場合、WAMPがオンになっていない場合でもアプリケーションを機能させたいと考えています)。

4
Scaum

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');
1
Kargi

さて...ここでの問題はxhr.setRequestHeader('Cookie', 'mycookie=cookie');行です。「Cookie」ヘッダーは、クライアントブラウザーが保存されたCookieを送信するために予約されているためです。これは、ブラウザがすでに行っていることを実行しようとしていることを意味します。任意のリクエストを送信すると、クライアントブラウザはリクエストしているサイトに関連するすべてのCookieを自動的に取得して「Cookie」ヘッダーに配置します。ブラウザにCookieが存在する場合、他に何もする必要はありません。 、お送りいたします。

1
poet