AJAX et sessions

Résolu/Fermé
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 9 juil. 2008 à 14:50
 N-ectron - 3 mai 2012 à 23:24
Bonjour,

Bonjour. Je realise acutelement une application dans le cadre de mon stage, et en ce moment je suis sur une partie en ajax

j ai un formulaire qui envoie des données a un script php via ajax
le formulaire est sur une page php, les et j utilise les sessions pour garder des informations. or, lorsque j utilise ma fonction ajax, mon formulaire recoit bien les donnés, mais n identifie pas la session.... le cookie PHPSESSID n est pas transmis

es ce que vous auriez une technique pour tranmettre ce cookie, ou pour ecrire dans le header de la requette envoyé avec l oject XMLHttpRequest ???

sinon, si ce n est pas possible, est il possible de faire passer le PHPSESSID dans l URL, et que la meme session soit reconnu (je sais qu on peut faire la session par url pour les clients n ayant pas de cookies, mais vu que ca pose surement des problemes de securité: vol de session, je pense qu un controle est fait pour voir si la session utilise bien toujours la methode URL ou COOKIE, qu il n y ai pas de changeæent en cours de route)

merci d avance pour toute reponse, ou demande de precision si j ai été trop flou dans mes descriptions ...

13 réponses

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
9 juil. 2008 à 15:22
bon, pour l instant j ai fait ca dans la page du formulaire, bien sur la session est ouverte en debut de page et on n accede a cette page que si on est dans une sessuiin utilisateur:

xhr_object.open("POST", "ajax.php?PHPSESSID=<?php echo $_COOKIE['PHPSESSID']; ?>", false);

donc je recupère l identifiant session....

et dans le fichier ajax.php je fais ca:

<?php

session_start();

if (isset($_SESSION['login']))
{

}
?>

et ca marche....

donc on peut a priori sur ma configuration (wamp 2.0) utiliser dans une URL une session qui a été crée sur un cookie.... c est pour moi une grosse faille de sécurité du PHP, mais ca m arrange bien ;)

doncm si vous faites de l ecoute reseau sur qqcn qui est connecté snas connection securisé (meme si le mot de passe a été passé en mode sécurisé), alors vous pouvez lui piquer l identifiant de sa session avec wireshark par exemple, et l ajouter dans l URL du site.... et hop, vous squattez sa session....

si vous avez une meilleur solution pour faire passer la sessionm notement ecrire des parametres aditionels dans l entete de la requete envoyée par ajax, je suis preneur!!! je préfererai envoyer la session par les entetes....
3
[o.o]REplay Messages postés 357 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 20 juillet 2009 28
9 juil. 2008 à 16:23
Bonjour,

Bizarre,
je n'ai jamais eu ce soucis: les variables de SESSION du serveur correspondaient bien --> mes cookie étaient bien transmis...

essaie après ton open:

xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

:)


et autre chose:
xhr_object.open("POST", "ajax.php?PHPSESSID=<?php echo $_COOKIE['PHPSESSID']; ?>", false);

pourquoi pas true? : en asynchrone c'est bien plus pratique pour le client: il peut naviguer en attendant la réponse du serveur.

une derniére chose :p

Tu peux te créer une variable
var data= "PHPSESSID=<?php echo $_COOKIE['PHPSESSID']?>& etc... ;

et faire

xhr_object.open("POST", "ajax.php",false);
xhr_object.send(data);

je ne my connait pas plus que ça, ca revient surement au même.
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192 > [o.o]REplay Messages postés 357 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 20 juillet 2009
9 juil. 2008 à 16:44
merci de ta reponse.

alors pour le mode synchrone / asynchrone, il faut que je refase un essai, mais au debut ou je m en servais, j arrivais pas a le faire marcher en asynchrone, donc je suis passé a autre chose comme ca marchait en synchrone.... mais je croi savoir d ouvenait mon pb ;)

le xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
en fait je suis trop bete, j avais pas vue que j utilisait dans une autre page.... mais je te remercie de me l avori redonné

en revanche, pour le
var data= "PHPSESSID=<?php echo $_COOKIE['PHPSESSID']?>& etc... ;

xhr_object.open("POST", "ajax.php",false);
xhr_object.send(data);

ca ne peux pas marcher. la session doit etre passée en GET ou en cookie, pas en POST (enfin, j en ai jamais entendu parler, et j ai rien vu s y raportant dans la doc de php). et j envoie d autres choses en post, ét vu que je fais un peu mon traitement a la bourin, il faudrai que je fasse gaffe a ce parametter ...
D autant plus que si PHP ne le gère pas en natif (le cookie de session passé en post), ca me sert a rien de le recevoir! il faudrai que je le traite a la main, il faudrai réecrir le session_open(), donc nonm pas la bonne solition.

bonne solution:
xhr_object.setRequestHeader("Cookie", "<?php echo $_COOKIE['PHPSESSID']?>");

voila.. si qqcn a un probleme de session avec ses cookies ...
0