PHP会话变量未设置

时间:2012-06-08 16:33:47

标签: php session

我有一个奇怪的问题。

我有一个我管理的车展网站的注册脚本,并且没有任何理由旧代码被破坏。我知道它之前有效,但现在没有。

我正在设置会话变量。我正在将整个变量数组保存到会话中,我知道在表单重新加载到新页面时提交表单后会话正常工作,并显示注册信息以进行确认。但是,该脚本然后继续到PayPal页面,在该页面中用户完成付款流程。然后,它会在完成付款流程后重定向回到注册信息提交到MySQL数据库的站点。

但是,当用户返回提交数据的确认页面时,会话变量完全为空。我已经回应了所有变量,那里什么都没有。

为了测试它的中断位置,我在填写直接链接到信息被转发到SQL服务器的确认页面的表单后,在你所采用的页面上放了一个链接。链接链接时,信息仍然存在。但是,如果您使用相同的URL并将其粘贴到地址栏(也就是不使用链接),则变量为空。

所以在这一点上,当你链接并点击页面时,我迷失了为什么变量很好,但是当你将相同的URL传递到地址栏而不是点击链接时,我不知道。会话在每个页面上启动,并且所有页面都在同一个域名上。

任何帮助?!

=====编辑===== 测试代码(给出一个粗略的想法)

我如何设置会话变量。 session_start();函数在加载此站点上的每个页面时调用,以实现其他页面的连续性:

$storedVars = array(1 => $name, $email, $state, $year, $make, $model, $generation, $color, $now, $paymentType);
$_SESSION['registration']=$storedVars;

在PayPal之后的确认页面上,信息被发送到数据库,运行以下代码(再次,session_start();已经调用):

$storedVars = $_SESSION['registration'];
$name = $storedVars[1];
$email = $storedVars[2];
$state = $storedVars[3];
$year = $storedVars[4];
$make = $storedVars[5];
$model = $storedVars[6];
$generation = $storedVars[7];
$color = $storedVars[8];
$now = $storedVars[9];

此时不需要第10个数组变量paymentType,因为它仅在提交表单后用于页面。

在完成表格后,通过paypal上的步骤或将正确的URL粘贴到地址栏后,在确认页面上回显这些变量时,没有任何内容。 然而.. 在提交表单后单击数据验证页面上的链接时,变量仍然存在。

1 个答案:

答案 0 :(得分:2)

您的上次评论让我相信您的会话设置为http://yoursite.com/,并且您发送给PayPal的返回网址为http://www.yoursite.com/(反之亦然)。 “www”实际上是您的基本域的子域,就您的浏览器而言,它被视为不同的主机。

长话短说,在使用paypal设置令牌时,请使用以下内容作为返回网址:

$_SERVER["HTTP_HOST"] . "/Path/To/PaypalReturnPage.php"