我正在创建一个带登录页面的网页游戏。如果用户希望转换为游戏的“专业”版本,则会将用户带到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行,看看域名是否有问题,但这没有任何区别。此外,所有密码,盐等都已根据本文的目的进行了更改,以防有人发表评论!!
希望有人能指出我正确的方向。
非常感谢,
丹。
答案 0 :(得分:2)
添加相同的问题,非常令人讨厌,因为从Stripe付款进行重定向并没有使我失去用户会话,而Paypal却使我失去了! 我不得不从贝宝表单中删除此选项,以免失去用户会话:
<input type="hidden" name="rm" value="2">
真的很疯狂,因为这个选项使我失去了用户会话!
付款后我仍然可以自动重定向。
答案 1 :(得分:1)
假设http://sitea/landing.php是您的网站页面。这应该从
开始session_start();
当您访问此页面时 - 如果您在浏览器中激活开发人员工具栏 - 您应该会看到您的PHPSESSID
现在让我们说某处有一个指向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链接
试验。
基本上尝试进行迭代,执行小的可验证步骤,并确保它们按预期工作。通过这种方式,当您遇到问题时,您确切地知道您所改变的内容以及在哪里寻找问题。