2010-09-09 5 views
0

J'ai vu cela demandé de plusieurs façons, mais ne trouve pas de réponse qui fonctionne.Comment puis-je me connecter au site distant avec PHP cURL, puis rediriger vers ce site

J'ai créé une page qui se connecte à un site distant .NET à l'aide de PHP/cURL. Fonctionne bien aussi loin que ça va - je peux récupérer les données de la page connectée via curl_exec et faire tout ce qui l'accompagne, mais ce que je dois réellement faire est de rediriger l'utilisateur vers cette page. La simple redirection me donne une page déconnectée sur le site distant. Je sais que la réponse est d'obtenir le cookie retourné lorsque cURL se connecte, puis de le passer lors d'un second appel. . . en quelque sorte. Je suis certain que quelqu'un doit faire cela et peut fournir un exemple de travail. S'il vous plaît, aidez - cela me rend fou!

Merci,

Mark

Répondre

2

Pas étonnant que vous ne puissiez pas trouver une réponse qui fonctionne.
C'est impossible.

+0

Oui, vous avez raison. – mpemburn

+0

Il m'a fallu une heure pour avoir le même aperçu. Je me sens * curlt * maintenant ... –

-1

Si l'utilisation des cookies du site que vous pouvez utiliser cURL.

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_HEADER, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "User=$user&passwd=$passwd"); 
curl_setopt ($ch, CURLOPT_POST, TRUE); 
curl_setopt($ch, CURLOPT_NOBODY, TRUE); 

$header = curl_exec($ch); 

if (preg_match("/set-cookie:(.*)\n", $header, $m)) { 
    $cookies = preg_replace('/(expires|path|domain)=[^;]*;?/i', '', $m[1]); 
    header("Cookies: " . $cookies); 
    header("Location: $url"); 
} 

cela devrait fonctionner mais je ne le teste pas.

+0

Qu'est-ce que c'est? Un scénario blockbuster hollywoodien? –

+0

Assez glib, vieille chose. – mpemburn

1

Le problème est que la connexion viendra de votre serveur PHP, pas de l'adresse IP de l'utilisateur final, de sorte que lorsque vous redirigez l'utilisateur, le site les voir sera probablement pas connecté.

Vous peut définir des trucs comme passer le cookie fourni à la connexion du serveur PHP à l'utilisateur final, mais si le site redirigé est même légèrement écrit, il ne tombera pas dans ce cas.

Si vous avez le contrôle total des deux sites et qu'ils peuvent accéder aux bases de données des uns et des autres, vous pouvez écrire du code back-end pour que le serveur PHP indique au site .net d'attendre l'utilisateur entrant; ça pourrait marcher. Mais vous auriez besoin de faire du back-end dans les deux systèmes. Si vous n'avez pas accès back-end au site .Net, alors la seule façon que je peux voir pour le faire serait d'utiliser le site PHP comme un proxy complet pour le site .Net - c.-à-d. Plutôt que de faire une redirection, affichez simplement la sortie du site .net directement via votre PHP. Cela aura toutes sortes d'autres problèmes associés à cela.

+0

Que se passe-t-il si curl refuse les cookies, forçant ainsi le site à transmettre l'identifiant de la session dans l'url? Bien sûr, cela suppose que le site n'exige pas que les cookies soient activés, et qu'il ne vérifie pas si ips a été modifié comme il le devrait. – Fanis

+0

Je déteste entendre que ce que je veux faire n'est pas possible. CURL enregistre des informations de cookie valides sur mon serveur - il correspond au cookie que le site distant envoie lorsque vous vous connectez directement. Donc, je ne peux pas analyser cela dans un format approprié, définir et envoyer avec un en-tête ("Cookies:". $ Cookies); ?? Ne jamais dire jamais. – mpemburn

+0

L'impossibilité de lire/écrire des cookies sur différents domaines constitue une protection fondamentale contre les attaques par script intersite. – Matthew

Questions connexes