3 votes

Comment maintenir l'état de session PHP avec une autre application

OBJECTIF :

Maintenir l'état de session entre une application PHP et une application Coldfusion qui, ensemble, constituent l'application entière.

MÉTHODE ACTUELLE :

Après s'être connecté à notre application Coldfusion (le seul moyen de se connecter, c'est-à-dire, impossible de se connecter via l'application PHP), nous utilisons le extrait de code JS suivant pour appeler un fichier PHP distant qui définit les cookies de session PHP (qui ne peuvent pas être définis via Coldfusion), et lors de visites ultérieures de pages Coldfusion, rafraîchit la session PHP :

  // Créer une image.
  var imgPing = new Image();
  // Définir l'URL de l'image sur l'URL de ping de l'application PHP distante.
  imgPing.src = "http://remotePHPApplicationURL/remoteFile.php";

Cet extrait de code est chargé sur chaque page Coldfusion lors de la connexion pour maintenir les sessions parallèles.

Cette méthode fonctionne comme prévu si elle est appelée via une page Coldfusion non-SSL, cependant, il existe quelques pages Coldfusion SSL qui constituent l'application. Lorsqu'une page SSL appelle cet extrait de code, nous recevons à la fois un avertissement de "contenu non sécurisé" (qui interrompt notre connexion SSL), ainsi qu'une erreur de "fonction anonyme", tous deux dans l'inspecteur Chrome.

Nous avons essayé CFHTTP pour "GET" ce fichier PHP, mais il ne définit pas les cookies PHP comme prévu. Il y a quelque chose que je ne comprends pas concernant la manière dont, en utilisant img.src, le fichier PHP est exécuté par rapport à l'utilisation de CFHTTP.

QUESTION :

Existe-t-il une autre meilleure méthode pour appeler/exécuter/pinger le fichier PHP au lieu d'utiliser img.src qui semble fonctionner uniquement dans des situations non-SSL ?

Voici un exemple de ce à quoi ressemble le fichier PHP :

session->save();
  setcookie('userid', 'uid');
  setcookie('password', 'pass');
  header("Content-Type: image/png");
?>

4voto

Chris Blackwell Points 2048

Vous pouvez utiliser CFHTTP, mais vous devez l'utiliser comme un proxy entre le navigateur et l'application distante et gérer manuellement les cookies envoyés et reçus.

J'ai réussi à le faire pour connecter des utilisateurs à phpBB depuis ColdFusion

Le processus ressemblerait à ceci

  1. CFHTTP vers remoteFile.php
  2. Inspecter la réponse http renvoyée et extraire les cookies définis par l'application distante
  3. utiliser CFCOOKIE pour les définir dans le navigateur de l'utilisateur

Dans les requêtes ultérieures, vous devrez voir si les cookies envoyés par l'application sont présents et s'ils le sont, les transmettre avec la requête CFHTTP à l'étape 1 en utilisant CFTTPPARAM. Il y a probablement un cookie de session ou similaire défini par l'application, celui-ci doit être envoyé pour maintenir la session.

0voto

Steve Bryant Points 1006

Je me trompe peut-être, mais je ne trouve pas de solution. Cependant, j'ai une idée de pourquoi trouver une solution sera difficile, ce qui pourrait être utile.

CFHTTP ne fonctionnera pas car c'est le serveur ColdFusion, et non le navigateur de l'utilisateur, qui appelle la page PHP. Par conséquent, le serveur ColdFusion a une session, mais l'ordinateur de l'utilisateur n'en a pas.

Il existe de nombreuses façons d'appeler des fichiers depuis le navigateur (vous pourriez l'appeler à partir d'une balise IMG, d'une balise CFSCRIPT, d'un IFRAME, d'un objet image...), mais elles rencontrent toutes le même problème - à savoir que le navigateur émettra un avertissement si vous appelez un fichier non-SSL depuis une page SSL.

Donc, maintenir une session PHP depuis ColdFusion via SSL lorsque SSL n'est pas disponible sur le serveur PHP peut ne pas être possible sans avertissement dans le navigateur (bien sûr, j'aimerais me tromper à ce sujet).

Ce qui pourrait fonctionner, en fonction de vos besoins, est de faire en sorte que tout lien de votre serveur vers le serveur PHP envoie un formulaire post au serveur PHP incluant les informations de connexion afin qu'ils soient automatiquement connectés lorsqu'ils visitent ce site tiers. Je ne sais pas si cela fonctionnerait pour votre situation, mais je voulais le mentionner.

L'essentiel, cependant, est de chercher un autre moyen pour atteindre votre objectif plutôt que de maintenir la session à chaque demande de page de votre application ColdFusion.

0voto

Ron Barr Points 121

Je recommanderais d'utiliser une implémentation SSO SAML et de n'authentifier à l'application spécifique que lorsque vous en avez besoin, vous pouvez utiliser une base de données pour stocker des informations de session simples sous forme de chaînes json. Si elle est correctement mise en œuvre, l'expérience sera transparente et offrira une solution évolutive.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X