rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[PHP] cURL et session

smellems, le vendredi 27 octobre 2006 à 21:04:37
Bonjour à tous...

j'ai un problème avec mon site web, ou une fonction en particulier...

j'explique...

j'utilise aitsafe pour gérer les paniers d'achats et la collect de donnée des clients (carte de crédit, tel, ...). mais au lieu de POSTer mes donnée directement sur ce site je l'envoie à un script que j'ai écrit (en php) qui vérifie que l'item voulu est disponible. si c'est OK le scipt refait alors le POST sur atisafe et affiche la page résulante.

comme ceci
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://ww7.aitsafe.com/...");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($curl);
curl_close($curl);
print($page);

le problème est que comme c'est mon serveur qui fait le POST et pas le client, aitsafe ne peut pas savoir quel client fait la commande.

en gros, j'ai un seul panier pour tout le monde...

le site: http://www.mamankangourou.com/boutique1.php

et le script dont je parle est chkqte.php qui est appeler lorsque on ajoute un item au panier

il est possible d'ajouter un item à partir d'un ordinateur et d'en ajouter un autre à partir d'un autre poste.

je sais pas... si quelqu'un a une idée ou commentaire je veux savoir parce que je ne vois pas comment régler le problème. j'aime bien (et mon patron aussi) le fait que je puisse vérifier si l'item est en stock avant de compléter la transaction...

merci de votre aide
Répondre à smellems  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
xbb, le lundi 30 octobre 2006 à 11:54:06
Normalement si le script de vérification de disponibilité refait à l'identique le POST, il n'y a pas de raison que aitsafe voie la différence (lui il reçoit une liste de variables, c'est tout).

C'est dans chkqte.php qu'il doit y avoir un problème : le script ne reproduit peut-être pas à l'identique l'ensemble des variables POST qu'il reçoit...
Répondre à xbb

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
smellems, le mardi 31 octobre 2006 à 21:19:31
oui oui...

j'ai fais des tests et aitsafe crée un cookie sur l'ordinateur du client pour savoir qui est qui (sessions). Mais moi, puisque c'est le chkqte.php qui fait le POST, c'est comme si cest toujoiurs le serveur mamankangourou.com qui fait le POST et donc un seul panier pour tous le monde.

mais en cherchant je crois que j'ai trouvé... avec curl c'est possible de simuler le passage d'un cookie: envoyer un cookie avec le POST et recevoir le cookie. ensuite je pourrais juste le mettre sur le client...

je vais essayer de faire ça demain...
Répondre à smellems

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
LoLoBeF, le jeudi 10 mai 2007 à 10:46:42
Fait un <input type="hidden"> contenant l'id de l'internaute sur ta 1ère form et que tu repassera avec CURL.
Comme ça, tu peux identifier le visiteur qui a fait la requête dans le script de traitement.
Répondre à LoLoBeF

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
druide, le mercredi 21 novembre 2007 à 12:27:22
Salut,

Bon, je sais pas si tu as toujours ce problème, mais voici la solution que j'utilise : en fait il faut rajouter une option à CURL pour lui dire de passer l'identifiant de session de l'internaute en tant que cookie :

session_start(); // ICI on active les variables de session (si ce n'est pas déjà fait)
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://ww7.aitsafe.com/...");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_COOKIE, session_name() . '=' . session_id()); // ICI on rajoute le cookie session_id
$page = curl_exec($curl);
curl_close($curl);
print($page);

Cela fonctionnera si le serveur de destination accepte les identifiants de session par cookie (cde qui est en principe le cas par défaut). Sinon, si le serveur est configuré pour accepter les identifiants de session par URL, il faut rajouter le champs mais dans l'URL :


session_start(); // ICI on active les variables de session (si ce n'est pas déjà fait)
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://ww7.aitsafe.com/...?".session_name() . '=' . session_id()); // ICI on passe le session_id par URL
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($curl);
curl_close($curl);
print($page);

Voilà, cela devrait résoudre ton problème. Il y a juste un problème qui peut se poser si jamais l'url du serveur de destination est le serveur lui-même (une requête HTTP "interne") : dans ce cas, il faut savoir que le fichier de session est par défaut ouvert en mode exclusif, ce qui fait que tu auras un joli timeout à première vue inexplicable... Si cela arrive, il te suffit de rajouter la commande suivante juste avant le curl_exec() :

session_write_close();

Ceci à pour effet de sauvegarder et fermer le fichier de session courant (malheureusement, cela rend la session inutilisable pour la suite du script...), donc lorsque CURL fera sa requête HTTP, il pourra "se faire passer" pour la même session sans problème.

Sinon, j'ai une question, vous pourrez peut-être m'aider : est-il possible d'initialiser CURL et de le détruire (close) une seule fois tout en faisant plusieurs exec au milieu ?

Merci, @+
Répondre à druide

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 druide, le mercredi 21 novembre 2007 à 12:44:04
Re,

Bon, en fait je viens de tester plusieurs curl_exec() au milieu d'un curl_init() ... curl_close() et çà fonctionne...Sur l'action j'ai un peu trollé...

@+
Répondre à druide
Logiciels pertinents trouvés dans les téléchargements
Télécharger PHP Edit 0.6PHP Edit - PHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de...Catégorie: PHP
Licence: Freeware/gratuit
Télécharger Session Manager 0.6.1.13Session Manager - Session Manager est un outil permettant de sauver et de restaurer les états de toutes les fenêtres sous Firefox. Cette...Catégorie: Extensions Firefox
Licence: Freeware/gratuit
Télécharger MSN Polygamy 21-06-2006MSN Polygamy - Msn/Windows Live Messenger Polygamy permet d'ouvrir plusieurs instances (copies) de Windows Live Messenger avec...Catégorie: Messagerie instantanée
Licence: Freeware/gratuit
Télécharger WAMP Server 2.0cWAMP Server - WAMP5 (WAMP signifiant Windows Apache Mysql PHP) est une plateforme de développement Web sous Windows. Il vous permet de...Catégorie: Serveurs
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « [PHP] cURL et session »