【问题标题】:PHP Session Variables Not Set未设置 PHP 会话变量
【发布时间】:2012-06-08 16:33:47
【问题描述】:

我遇到了一个奇怪的问题。

我有一个我管理的车展网站的注册脚本,但旧代码无缘无故被破坏。我知道它以前有效,但现在无效。

我正在正确设置会话变量。我将整个变量数组保存到会话中,并且我知道一旦表单被提交,会话就会工作,因为表单会重新加载到新页面,并且我会显示注册信息以进行确认。但是,该脚本随后会继续转到 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此时不需要,因为它只用于表单提交后的页面)

当按照贝宝上的步骤或在填写表格后将正确的 URL 粘贴到地址栏中后,在确认页面上回显这些变量时,什么都没有。 然而.. 当您在提交表单后单击数据验证页面上的链接时,变量仍然存在。

【问题讨论】:

  • 你能创建一个minimal test case 来演示这个问题吗?
  • 在确认页面中“删除”您的会话后,它们仍然可以被例如使用。后页?
  • 粘贴 URL 时,听起来您正在开始一个新会话。没有代码示例很难看到。
  • 我在上面的问题中包含了一些与会话直接相关的代码。我的脚本的设计方式是,它会在运行确认页面的任何部分后销毁会话,以防止任何意外的额外数据提交。
  • 此时转储会话变量会给您带来什么?

标签: php session


【解决方案1】:

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

长话短说,在使用 paypal 设置您的令牌时,使用以下作为返回 url:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多