2016-11-23 2 views
0

Je crée un jeu en ligne avec une page de connexion. Ceci amène l'utilisateur à Paypal s'il veut convertir en une version "pro" du jeu. Le problème que je rencontre est que la session semble être en rupture de retour de Paypal à ma page de paiement_successful.php. Les variables de session sont toutes vides.PHP - Perdre la session après la redirection paypal

J'ai commencé par donner à toutes les pages appropriées une ligne session_start(). L'ID de session (extrait de la console dans Chrome) est le même lorsque la session démarre et revient à payment_successful.php. Donc, cela "semble" être constant. Après beaucoup de bricolage avec des idées différentes, j'ai essayé d'ajouter manuellement un ID de session.

Tant la page Page Connexion et Payment_successful:

session_id('my_id'); 
session_start(); 

Cela fonctionne comme un charme et retourne toutes mes variables de session parfaitement. Cependant, je suppose que c'est une idée incroyablement mauvaise d'avoir un identifiant de session fixe (désolé, j'ai oublié de mentionner que je suis nouveau dans tout cela).

Je changé la page de connexion pour créer mon propre identifiant de session, en espérant que cela simplement prendre simplement la nouvelle valeur à la place de la valeur fixe:

Connexion Page d'

add_seshid(); 
session_start(); 
// session_set_cookie_params (lifetime,'/','.mydomain.com',false); 

function add_seshid() { 
    $sesh_salt1 = "*s!$e"; 
    $sesh_salt2 = "$6#£"; 
    $sesh_date = date("mYhds"); 
    $sesh_pass = "lambchops".$sesh_date; 
    $sesh_token = hash('ripemd128',"$sesh_salt1$sesh_pass$sesh_salt2"); 
    session_id($sesh_token); 
} 

Payment_successful Page:

session_id($sesh_token); 
session_start(); 

Bien qu'il ne sortie un identifiant de session (par exemple. 986a25f1d1fdabc62837def39b485c6), et enjambe juste en session, il ne revient pas trop d'une session variables La ligne session_set_cookie_params que j'ai bricolée, en utilisant mon propre nom de domaine, pour voir s'il y avait un problème avec le changement de nom de domaine, mais cela n'a fait aucune différence. En outre, tous les mots de passe, sels, etc., ont été modifiés pour les besoins de ce poste au cas où quelqu'un avait envie de commenter !! En espérant que quelqu'un pourrait me diriger dans la bonne direction.

Un grand merci,
Dan.

Répondre

1

Disons qu'il y a http://sitea/landing.php qui est la page de votre site. Cela devrait commencer par

session_start(); 

Et lorsque vous accédez à cette page - si vous activez la barre d'outils de développeur dans votre navigateur - vous devriez voir votre PHPSESSID

enter image description here

Maintenant, disons que quelque part il y a un lien vers paypal

echo '<a href="http://paypal.com">Go to paypal</a><br>'; 

et après l'achat complet et redirigés de paypal à votre page de succès - vous voyez même PHPSESSID en t Le navigateur?
Votre page succès devrait également commencer par

session_start(); 

Après quoi vos vars session devraient être disponibles via $_SESSION['varname']

Edit 1:

Avez-vous essayé de tester sur 2 simples machines virtuelles?
Retire 2 VM.
On représentera votre site Web (appelons-le SiteA) et un autre représentera votre paypal (appelons-le SiteB).
Le code suivant SiteA create test

cat -n FormData.html 
1 <!DOCTYPE html> 
2 <html> 
3 <body> 
4 
5 <form action="session_start.php" method="post"> 
6 First name:<br> 
7 <input type="text" name="firstname" value="Mickey"> 
8 <br> 
9 Last name:<br> 
10 <input type="text" name="lastname" value="Mouse"> 
11 <br><br> 
12 <input type="submit" value="Submit"> 
13 </form> 
14 
15 <p>If you click the "Submit" button, the form-data will be sent to a page called "action_page.php".</p> 
16 
17 </body> 
18 </html> 

cat -n session_start.php 
1 <?php 
2 session_start(); 
3 echo "Hello World!<br>"; 
4 echo "Received First Name as " . $_POST['firstname'] . "<br>"; 
5 echo "Received Last Name as " . $_POST['lastname'] . "<br>"; 
6 $_SESSION['firstname']=$_POST['firstname']; 
7 $_SESSION['lastname']=$_POST['lastname']; 
8 echo '<a href="display_session_data.php">Display session data</a><br>'; 
9 echo '<a href="http://192.168.0.43/paypal.php">Go to paypal</a><br>'; 
10 ?> 
11 

cat -n display_session_data.php 
1 <?php 
2 session_start(); 
3 echo "First Name is $_SESSION[firstname] <br>"; 
4 echo "Last Name is $_SESSION[lastname] <br>"; 
5 ?> 

Sur le site B créer une page

cat -n paypal.php 
1 <?php 
2 echo '<a href="http://192.168.0.42/display_session_data.php">Go back to game site</a>'; 
3 ?> 

Voir si cela fonctionne pour vous. Cela devrait.
Ensuite, si cela fonctionne - remplacer SiteB lien avec votre lien paypal.
Test.
Essentiellement, essayez d'effectuer des itérations en effectuant de petites étapes vérifiables et assurez-vous qu'elles fonctionnent comme prévu. De cette façon, le moment où quelque chose se brise, vous savez exactement ce que vous avez changé et où chercher un problème.

+0

Salut, oui c'est le même PHPSESSID depuis le début jusqu'à la fin, sauf pour les pages Paypal qui ont leurs propres identifiants. J'ai déplacé la session_id en dessous du session_start, mais il n'y a aucune différence avec le retour vide. Mon lien vers Paypal est: \t header ('emplacement: https: //www.sandbox.paypal.com/cgi-bin/webscr'.$querystring); \t exit(); –

+0

Avez-vous essayé de tester votre code contre quelque chose qui n'est pas paypal? Disons un formulaire simple qui soumet deux champs de saisie à votre page PHP. PHP démarre les sessions et définit les variables de session lues depuis $ _POST. Ensuite, vous cliquez sur le lien vers le site qui vous mènera à un autre site (différent ip/fqdn). Sur cet autre site - mettre un lien vers le site original du fichier php différent qui pourrait également démarrer la session et afficher simplement les vars de session. J'ai travaillé avec paypal sandbox avant et je n'ai jamais eu ce comportement que vous avez décrit. –