[Ajax] Appel fichier externe et sessions

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Robinson, 17 Juillet 2012.

  1. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Bonjour,

    J'essaie de réaliser la configuration suivante :
    - serveur A appelant script S de serveur B (via ajax.request)
    - le script S démarre une session, stocke des cookies...etc
    - le serveur A redirige ensuite sur le serveur B (window.location.replace)

    Mon problème est que le serveur B ne récupère pas les sessions et cookies instanciés dans le script S.

    J'ai bien autorisé script S à recevoir des données du serveur A :
    Code:
    header("Access-Control-Allow-Origin: http://mon-serveurA.com");
    header("Access-Control-Allow-Headers: X-Prototype-Version,X-Requested-With");
    En consultant l'outil de développement du navigateur, je constate que mon script S est appelé à deux reprises dont la première avec une methode OPTIONS que je ne comprends pas...

    Bref si vous avez une solution merci.


    PS : mon serveur B est un sous domaine de serveur A
     
  2. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    J'ai trouvé une solution que j'espère temporaire, je transmet le PHPSESSID...
     
  3. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 021
    J'aime reçus:
    1
    il me semble (jamais testé) que tu peut passer un cookies entre sous domaines si il est défini sur le domaine principal "example.com" (et pas "www.example.com").
    bref il serait alors exploitable via le www et tout autre sous domaine. Il est alors peut être possible de gérer des sessions communes.
     
  4. chtipepere
    chtipepere WRInaute occasionnel
    Inscrit:
    8 Janvier 2004
    Messages:
    428
    J'aime reçus:
    0
    Je confirme les dires de zeb.
    Ton cookie doit être définit sur .example.com
     
  5. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 181
    J'aime reçus:
    351
  6. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    J'ai essayé, ce n'est vraisemblablement pas ça le problème.

    Je viens de voir qu'aucun cookie n'est créé sur le script S hormis le PHPSESSID.

    En fait, après tests, je constate :
    - si création d'un cookie avant création session, session inexistante, valeur du cookie effacée, domaine modifié (par celui enregistré dans la session)
    - si session créée avant enregistrement cookie, le cookie n'est pas sauvegardé mais modifie la session (domaine)

    Bref, la galère... un seul cookie sauvegardable, session comprise (sans pour autant réussir à la récupérer ensuite)
     
  7. sky
    sky WRInaute discret
    Inscrit:
    3 Mars 2003
    Messages:
    227
    J'aime reçus:
    0
    Dans ton htaccess
    php_value session.cookie_domain .example.com

    Dans ton code php
    ini_set('session.cookie_domain', '.example.com' );

    Ensuite, il faut déclarer le session id dans ton cookie de cette manière :
    Code:
    setcookie("PHPSESSID", session_id(), $dateDePeremption, "/", ".example.com");
    J'ai mis ceci en place pour un service de téléchargement de fichier avec stockage de fichiers sur plusieurs serveurs différents en utilisant les sous domaines du genre serv1.dom.fr
     
  8. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Merci mais ça ne fonctionne toujours pas même si je sens que l'on se rapproche.

    Mon serveur B me rebalance à chaque fois le même session_id(). J'ai beau tester toutes les solutions pour supprimer cette session vide, impossible, il faut une fermeture du navigateur pour qu'elle soit réinitialisée, et malheureusement, elle est réinitialisée à la place d'utiliser la session en cours...
     
  9. sky
    sky WRInaute discret
    Inscrit:
    3 Mars 2003
    Messages:
    227
    J'aime reçus:
    0
    Je sais pas trop comment t'aider sans connaitre beaucoup plus d'informations technique sur les machines etc ...

    Sinon, si tu as une base de donnée centrale au domaine et sous domaine, tu peut gérer un système de "token".

    Tu ajoute un token dans la bdd depuis le site A.
    Le site A appel le site B en passant le token
    Le site B vérifie le token et récupère dans la bdd les infos requis

    De cette façon, plus besoin d'être connecté vu que le token est ajouté depuis le site A.
    Il faut évidemment supprime le token à l'utilisation de celle-ci.

    Juste une idée :)
     
  10. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    J'aimerai ne rien passer ainsi.

    J'ai essayé de renommer la session avec un ini_set('session_name', 'PHPSESSIDTEST');
    Mais cela ne fonctionne pas alors qu'un session_name(PHPSESSIDTEST''); fonctionne.
    Cependant ça ne change rien, il ne récupère pas la session et en crée une nouvelle...
    En essayant de modifier directement le php.ini pour le domaine, le problème ne change pas donc cela ne viendrai pas du nom de domaine, ni du path, et là je suis un peu perdu :(
     
  11. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 181
    J'aime reçus:
    351
    Tu as analysé les entêtes HTTP du request AJAX via firebug ou le débuggeur de ton nav préféré ?
    Tu px voir si le set cookie s'est fait, si le type des données renvoyées sont bonnes, si t'as un headers already sent by, et j'en passe...
     
  12. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Après analyse, le cookie de session n'est pas sauvegardé par le navigateur au niveau du script S.
    Je pense que tous les navigateurs ne sont pas logés à la même enseigne mais la flemme de tous les tester...

    Je vais me résigner à transmettre l'id session (peut-être à une page temporaire pour éviter que l'utilisateur se prenne cet id dans l'url).
     
  13. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 181
    J'aime reçus:
    351
    Et sans AJAX t'as essayé de te rendre sur le site A et B et constater si la session est transmise ?
     
  14. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Oui il n'y a pas de problème si la session est créée sur A pour la récupérer sur B.

    Mais je ne veux pas ça car il est possible qu'il y ai plusieurs sessions différentes sur différents serveurs.

    Je veux que A appelle un script de connexion de serveur B, C ou D et que A redirige sur celui-ci.
    Le problème est que ce script n'enregistre pas du tout le cookie, peu importe le domaine qu'on lui fourni. Il n'y a que lorsque c'est un script du serveur A que cela fonctionne.
    Malgré le fait de jouer avec Access-Control-Allow-Credentials qui en théorie autorise les cookies et sessions dans les url distantes, ça ne fonctionne pas :(
     
  15. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 021
    J'aime reçus:
    1
    C'est là que tu bug. C'est forcement le serveur A qui impose la session pas l'inverse puisque c'est lui qui est sollicité en premier.
    Il est plus logique de récupérer la session sur le serveur B puisqu'elle existe déjà au moment ou ajax sollicite ce serveur.
     
  16. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Non non le serveur A n'a aucune session de lancée avant de lancer le script.
    C'est un simple formulaire qui transmet des données au script du serveur B et qui gère les retours du script (affichage des erreurs ou redirection vers le serveur B si connexion réussie).

    En essayant sur Firefox et Safari (j'utilise Chrome), problème identique.

    Le cookie de session n'est pas sauvegardé, que cela soit pour le serveur A ou B.
     
  17. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 021
    J'aime reçus:
    1
    et la config du navigateur c'est pas un peut bridé genre "uniquement pour le domaine" et pas les domaines tiers ? (mais bon ça changera rien a ton problème vue sue tu va pas faire bidouiller tes utilisateurs)
     
  18. sky
    sky WRInaute discret
    Inscrit:
    3 Mars 2003
    Messages:
    227
    J'aime reçus:
    0
    J'ai l'impression que ton soucis est pas que une histoire de code, mais je peut me tromper.

    Tu pourrais donner un exemple basic mais complet sur ce que tu souhaite faire ?
    De cette façon on pourra non seulement voir la logique du processus mais aussi tester nous même :)
     
  19. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Je ne sais pas si je peux détailler davantage que je ne l'ai fait.
    Je pense zapper ce problème vu que j'ai trouvé le moyen de passer outre mais bon il est possible qu'un jour je l'ai de nouveau.

    Tous mes serveurs ne sont que virtuels, c'est la même machine, ce sont seulement des sous-domaines différents (mais il y aurait le même soucis sur un serveur vraiment distant).

    Mon serveur/NDD principal me permet de me connecter sur le serveur/ss-domaine de mon choix.
    J'envoie donc des données à un script du serveur en question pour m'y connecter. Si échec, affichage des erreurs, si réussite redirection sur ce serveur/ss-domaine.
    Ce script en cas de réussite doit créer une session sur ce serveur, elle est bien créée mais le cookie de session n'est pas sauvegardé par le navigateur et donc impossible de la récupérer sans transmettre l'id de session.

    J'ai lu à droite à gauche que cela était possible mais n'y arrive pas.


    Je viens cependant je trouve de trouver la solution qui est utilisée un peu partout... elle se nomme CURL et gère très bien les sessions et cookies apparemment (ce que je ne savais pas ne l'ayant que survolée auparavant). Je ne sais pas pour autant si je vais l'utiliser dans le cas présent. Mais cela évitera à coup sûr les pertes de temps dans l'avenir.
     
Chargement...
Similar Threads - [Ajax] Appel fichier Forum Date
[AJAX] tester la présence d'un fichier distant Développement d'un site Web ou d'une appli mobile 17 Août 2011
[AJAX] Validation de form en ajax : captcha non reconnu Développement d'un site Web ou d'une appli mobile 21 Juin 2011
[Ajax] modifier un lien image Développement d'un site Web ou d'une appli mobile 26 Novembre 2008
[ajax] Empêcher l'arrivée de données plus anciennes Développement d'un site Web ou d'une appli mobile 16 Septembre 2008
[AJAX] Menu accordéon 3 niveaux ! Développement d'un site Web ou d'une appli mobile 26 Août 2008
[Ajax] script post ou get ? précision Développement d'un site Web ou d'une appli mobile 11 Juin 2008
[Ajax] Formulaire et envoie $_POST Développement d'un site Web ou d'une appli mobile 5 Juin 2008
[AJAX] Comment gérer les header('location: '); Développement d'un site Web ou d'une appli mobile 2 Juillet 2007
[AJAX] Descendre la scroll d'une pseudo frame Développement d'un site Web ou d'une appli mobile 17 Avril 2007
Site à référencer [ajax] Débuter en référencement 10 Avril 2007
[AJAX] Rafraichir une page avec un bouton Développement d'un site Web ou d'une appli mobile 23 Mars 2007
[AJAX] Formulaire de connexion à phpBB Développement d'un site Web ou d'une appli mobile 16 Février 2007
[AJAX] ou [PHP & JAVASCRIPT] ? Développement d'un site Web ou d'une appli mobile 16 Septembre 2006
[AJAX] Spotback Développement d'un site Web ou d'une appli mobile 14 Septembre 2006
[RESOLU] [AJAX] réellement assynchrone ? Développement d'un site Web ou d'une appli mobile 10 Mars 2006
[Ajax] probleme de charset Développement d'un site Web ou d'une appli mobile 8 Mars 2006
Faire appel à un service de rédacteurs Web Débuter en référencement 29 Juillet 2021
Ancienne font toujours appelée par le site, status 301 Demandes d'avis et de conseils sur vos sites 21 Juillet 2021
Appeler une image Développement d'un site Web ou d'une appli mobile 20 Janvier 2021
***Petit rappel pour le SEO en 2020 Débuter en référencement 16 Janvier 2020