2010-12-09 35 views
1

Nous avons une page Web qui récupère des données d'un autre serveur. La page est chargée "localement" (à partir du système de fichiers, cette application web sera placée dans une application phonegap et nous la simulerons dans firefox/chrome en la chargeant à partir du fichier: // url), et utiliserons jquery et ajax récupérer des données d'un serveur. Le serveur semble configuré pour respecter la norme CORS (http://www.w3.org/TR/cors/, c'est-à-dire que nous définissons des en-têtes tels que Access-Control-Allow-Origin, Access-Control-Allow-Credentials et Access-Control -Max-Age) mais il ne semble pas que le cookie de session que le serveur a défini ne soit jamais lu ni transmis au serveur. Et si on crée "à la main" une session sur le serveur (ie en émettant les requêtes sur la barre d'adresse pour que le serveur mette un cookie sur le client) et qu'on ouvre la page précitée, ce cookie n'est jamais renvoyé au serveur dans les requêtes Ajax.Les requêtes jQuery/Ajax sur un serveur Cross Site n'utilisent pas le cookie (auth) défini sur ce serveur.

Un indice sur ce qui pourrait éventuellement être faux?

+0

si votre page est à 'file: // ...', alors qu'est-ce que le "domaine d'origine"? Quelle valeur envoyez-vous pour 'Access-Control-Allow-Origin'? – Lee

Répondre

1

Dans quel navigateur nous testons cela? IE et Safari ont des règles particulières quant aux réponses qu'ils vont autoriser à mettre en place des cookies, surtout lorsqu'ils sont faits à partir d'une page hébergée localement. Avez-vous testé cette page sur un domaine qui n'est pas un système de fichiers local?

Pour IE, vous devrez configurer les en-têtes P3P du serveur. Pour Safari, vous devrez naviguer vers l'URL du serveur avant de permettre à des requêtes faites depuis une page d'un domaine différent de créer des cookies.

+0

+1 Pour mentionner les en-têtes P3P, si peu de personnes semblent les générer régulièrement. – Orbling

+0

En cours de test sur Firefox et Chrome (même comportement). La page sera hébergée sur un iPhone/Safari en production. Cependant, il n'est pas facile de déboguer le comportement sur ce périphérique. – molleafauss

+0

Et j'envoie actuellement * en tant que "Access-Control-Allow-Origin" – molleafauss

0

Essayez-vous de définir un cookie à partir d'une image ou IFrame?

Votre problème peut être lié à la politique de cookies tierce partie. Je trouve que la mise en les en-têtes P3P suivante au serveur Web aide dans la plupart des cas:

P3P: CP = NOI JNV NOR

Cette solution ne fonctionnera pas sur Safari, mais fonctionne très bien sur IE & Firefox . Étant donné que votre application cible l'iPhone, elle ne résout peut-être pas votre problème.