web-dev-qa-db-fra.com

envoyer un cookie avec XMLHTTPRequest (TVMLJS)

Je développe une application pour mon AppleTV. L'application lira des films d'un site Web en ligne qui n'a pas développé d'API pour ce genre de chose.

J'utilise XMLHTTPRequest pour obtenir les différentes URL et permettre à l'utilisateur de rechercher son film, etc. Tout fonctionne correctement, à l'exception d'une demande unique. Pour obtenir l'URL du film, je dois envoyer une demande d'obtention à une adresse spécifique (disons http://example.com/getmovie.html ) avec un cookie constant (disons mycookie = cookie). 

J'ai essayé d'utiliser setRequestHeader:

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

Mais aucun cookie ne semble être envoyé ... J'ai également essayé de le définir avec Document.cookie comme je l'aurais probablement fait dans un script "normal" js (exécuté dans mon navigateur), mais sans succès non plus.

C'est extrêmement frustrant, d'autant plus que je suis coincé si près de la fin de mon application.

Je suppose que cross-Origin est peut-être le problème, mais je peux obtenir des URL sans problème si je n'ai pas à configurer de cookies. Je suis donc un peu perdu.

Faites-moi savoir comment je peux obtenir http://example.com/getmovie.html avec un en-tête de cookie spécifique.

Merci de votre aide

4
Scaum

je suis désolé de vous informer, mais la fonction xmlHTTPRequest de javascript ne permet pas de définir un en-tête de cookie pour des raisons de sécurité, comme indiqué ci-dessous: Pourquoi les cookies et les en-têtes set-cookie ne peuvent pas être définis lors de la création de xmlhttprequest à l'aide de setRequestHeader? Le meilleur moyen de voir que vous faites cette demande d’accès est de vous adresser à un serveur proxy que vous exécuteriez. Je crois qu'il est conçu de cette manière pour vous empêcher de définir des cookies sur des domaines que vous ne possédez pas. En outre, je ne vois pas de solution de rechange à ce problème car aucun document ne figurait dans la documentation que j'ai consultée.

3
Mohammad Ali

Si quelqu'un a le même problème:

Je n'ai pas trouvé de solution pour envoyer un cookie avec javascript. Cependant, dans mon cas, l'origine de la demande importait peu, seul le cookie l'était. Ma solution consistait alors à créer un fichier PHP recevant l'URL de destination et le contenu du cookie en tant que paramètres, puis en envoyant la requête get avec le cookie comme en-tête de requête. (Plus d'informations sur la procédure à suivre ici: PHP Demande GET, envoi des en-têtes ).

Dans mon javascript, j'utilise ensuite XMLHttpRequest pour me connecter à mon fichier PHP (hébergé en ligne) avec des paramètres d'obtention simples, puis je reçois la réponse de PHP. Cette astuce ne fonctionnera évidemment pas si l’origine de la demande compte (sauf si vous hébergez votre dossier chez vous, je suppose, mais dans mon cas, je veux que ma candidature fonctionne même si mon WAMP n’est pas allumé).

4
Scaum

Cordova comment envoyer un cookie de session, autoriser les informations d'identification avec 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');
0
Kargi