2015-10-30 5 views
0

J'injecte une image dans un canevas que je dois sécuriser en passant des cookies avec ma requête. Mon problème est que le constructeur Image ne semble pas envoyer les cookies avec la demande lorsque le src est défini. Les cookies ne sont pas accessibles via js, ils sont envoyés par le navigateur.Comment envoyer des cookies dans un constructeur Image()

var img = new Image(); 
img.setAttribute('crossOrigin', 'anonymous'); 

validateUrl(originalUrl, function (validatedUrl) { 
    img.src = validatedUrl; //GET fails after this happens 
}); 

img.onload = function() { 
    drawImageProp(context, img); 
} 

Répondre

1

Si vous définissez l'attribut crossorigin sur une image, puis les cookies ne sont pas envoyés à la demande de l'image. C'est ainsi que cette fonctionnalité est écrite pour fonctionner.

Les cookies sont liés à un domaine/sous-domaine spécifique (et éventuellement à un chemin dans ce domaine). Lors de la demande d'une image, les cookies du domaine sur lequel l'image est demandée seront automatiquement envoyés avec la demande d'image.

Le navigateur ne donne accès qu'à Javascript aux cookies qui sont dans la même origine que la page Web hôte. Donc, Javascript n'a pas la capacité de lire les cookies pour un autre domaine. Ainsi, lorsque vous demandez votre image en définissant la propriété .src, tous les cookies appartenant au domaine de l'URL de l'image seront automatiquement envoyés avec la demande d'image (vous ne faites rien pour provoquer cela).

+0

Lorsque je mets l'URL dans une balise , elle apparaît très bien - dans ce cas, inspecter les appels réseau, je peux voir que les cookies vont avec la demande. Dans ce cas, le serveur me donne une erreur parce qu'il n'a pas reçu les cookies, et j'essaie de comprendre pourquoi ils ne vont pas. La requête ne va même pas dans un autre domaine dans ce cas. – Tantelope

+0

@TanyaMounitsyna - J'ai exécuté mes propres tests dans un jsFiddle et les cookies sont envoyés lorsque je crée une image manuellement. Donc, je ne suis pas sûr de savoir comment reproduire votre problème. Dans mon test, j'ai dû ajouter un paramètre de requête aléatoire à la fin de l'URL juste pour vaincre le cache d'image afin de tester. Êtes-vous sûr de ne pas avoir de problèmes de mise en cache? – jfriend00

+1

@TanyaMounitsyna - Si vous définissez l'attribut 'crossorigin' sur une image, les cookies ne sont pas envoyés avec la requête. C'est ainsi que cette fonctionnalité est écrite pour fonctionner. Voir la description par "anonyme" ici: https://developer.mozilla.org/fr-fr/docs/Web/HTML/Element/img#attr-crossorigin – jfriend00