[PHP] cURL et session
Fermé
smellems
Messages postés
135
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
4 mai 2012
-
27 oct. 2006 à 21:04
Klydde - 10 déc. 2010 à 00:16
Klydde - 10 déc. 2010 à 00:16
A voir également:
- Php curl session
- Easy php - Télécharger - Divers Web & Internet
- Estelle vient de verrouiller sa session d'ordinateur. que peut-on dire ? ✓ - Forum Windows 7
- Veuillez ouvrir une session avec les privilèges du gestionnaire ✓ - Forum Jeux vidéo
- Estelle vient de verrouiller sa session d’ordinateur. que peut-on dire ? ✓ - Forum Windows
- Teamviewer code de session expiré ✓ - Forum Windows XP
5 réponses
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, @+
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, @+
LoLoBeF
Messages postés
128
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
14 août 2007
40
10 mai 2007 à 10:46
10 mai 2007 à 10:46
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.
Comme ça, tu peux identifier le visiteur qui a fait la requête dans le script de traitement.
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é...
@+
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é...
@+
xbb
Messages postés
49
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
10 mai 2007
1
30 oct. 2006 à 11:54
30 oct. 2006 à 11:54
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...
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
smellems
Messages postés
135
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
4 mai 2012
46
31 oct. 2006 à 21:19
31 oct. 2006 à 21:19
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...
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...
10 déc. 2010 à 00:16
Merci à toi