PHP - paypal重定向后丢失会话

时间:2016-11-23 03:28:19

标签: php paypal session-state

我正在创建一个带登录页面的网页游戏。如果用户希望转换为游戏的“专业”版本,则会将用户带到Paypal。

我遇到的问题是,从Paypal返回到payment_successful.php页面时,会话似乎正在中断。会话变量都是空的。

我首先给所有适当的页面session_start()行。会话ID(从Chrome中的控制台获取)与会话开始时相同,并返回到payment_successful.php。所以这“看起来”是不变的。

经过大量修补不同的想法后,我尝试手动添加会话ID。

登录页面和Payment_successful页面:

session_id('my_id');
session_start();

这就像一个魅力,并完美地返回我的所有会话变量。然而,我猜这是一个非常糟糕的想法,有一个固定的会话ID(对不起,我忘了提到我是所有这一切的新手)。

所以我更改了登录页面以创建我自己的会话ID,希望它只是取新值取代固定值:

登录页面

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页面:

session_id($sesh_token);
session_start();

虽然它确实输出了一个会话ID(例如986a25f1d1fdabc62837def39b485c6),并在会话中跨越它,但它也不会返回任何会话变量。 我使用自己的域名修改了session_set_cookie_params行,看看域名是否有问题,但这没有任何区别。此外,所有密码,盐等都已根据本文的目的进行了更改,以防有人发表评论!!

希望有人能指出我正确的方向。

非常感谢,
丹。

2 个答案:

答案 0 :(得分:2)

添加相同的问题,非常令人讨厌,因为从Stripe付款进行重定向并没有使我失去用户会话,而Paypal却使我失去了! 我不得不从贝宝表单中删除此选项,以免失去用户会话:

<input type="hidden" name="rm" value="2">

真的很疯狂,因为这个选项使我失去了用户会话!

付款后我仍然可以自动重定向。

答案 1 :(得分:1)

假设http://sitea/landing.php是您的网站页面。这应该从

开始
session_start();

当您访问此页面时 - 如果您在浏览器中激活开发人员工具栏 - 您应该会看到您的PHPSESSID

enter image description here

现在让我们说某处有一个指向paypal的链接

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

完成购买并从paypal重定向到您的成功页面后 - 您是否在浏览器中看到相同的PHPSESSID?
您的成功页面也应该以

开头
 session_start();

之后,您的会话变量应通过$_SESSION['varname']

提供

修改1:

您是否尝试在2个简单虚拟机上进行测试? 分拆2个虚拟机。
一个代表您的网站(让我们称之为SiteA),另一个代表您的PayPal(让我们称之为SiteB)。
在SiteA上创建以下测试代码

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  ?>

在网站B上创建一个页面

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  ?>

看看这是否适合您。它应该 然后,如果这样做 - 用您的PayPal链接替换SiteB链接 试验。
基本上尝试进行迭代,执行小的可验证步骤,并确保它们按预期工作。通过这种方式,当您遇到问题时,您确切地知道您所改变的内容以及在哪里寻找问题。