如何将POST变量值附加到AJAX中的新SESSION变量并从其他脚本调用它?


How can I attach the POST variable values to a new SESSION variable in AJAX and call it from other script?

我检查了这个问题的公认答案,但是没有帮助

我试图使一个AJAX Post请求来sumbit我的注册表单, AJAX .php文件将检查输入的信息,例如密码匹配与否,然后将$_POST变量附加到$_SESSION变量,以便我可以调用从任何其他页面提交的数据。

Ajax.php

...
if ($everythingValid) {
// add this user to db
$_SESSION["signup_details"] = $_POST;
echo "SUCCESS@".$core->signupPaymentUrl($package); // tried without this line but didn't work
exit(); // tried without this line but didn't work
} else {
foreach ($errors as $e) print "<br>".$e;
exit();     
}
...
我用来调用文件的jquery代码如下:
var form = $('#signup');
 $("#submit").click(function() {
$.ajax( {
  type: "POST",
  dataType: 'html',
  crossDomain: true,
  url: form.attr( 'action' ),
  data: form.serialize(),
  success: function( response ) {
  if ("SUCCESS" === $.trim(response.split('@')[0])) {
  // user created, redirect to payment page
  var paymentUrl = $.trim(response.split('@')[1]);
  window.location.href = paymentUrl;
  } else {
    $("b#signupErr").hide();
    $("b#signupErr").html(response);
    $("b#signupErr").fadeIn();
    }
  }
} );
});

提交表单后,我成功地重定向到支付Url,然而,在访问我想使用我的会话的页面后,我无法弄清楚如何检索我的会话,尽管我很确定我已经在ajax.phpcompleteOrder.php中都包含了session_start,并且在打开php标签之前没有空格。

下面是我在两个文件中包含的行:

if(!session_id())  session_start();

我试图在ajax.php上var_dump $_SESSION变量,它看起来不错。然而,当我在completeorder。php上var_dump会话变量时它显示的是NULL

最后是completeOrder.php内容

if(!session_id())  session_start();
require_once("core.php");
$core = new coreOptions();
$email = $_SESSION["signup_details"]["email"];
$password = $_SESSION["signup_details"]["password"];
$package = $_SESSION["signup_details"]["pkg"];
$options = $core->attachOptions($package);
if ($core->registerUser($email,$password,$options,$package)) 
$core->redirect("registrationCompleted.php");

在completeOrder.php文件中删除if(!session_id()) session_start();

,然后只添加session_start();,它将做的伎俩!

session_id()将在ajax.php中返回一个空字符串,如果之前没有调用session_start()。因此,ajax.php中的session_start()将永远不会被调用,$_SESSION的内容将不会存储在任何地方。

所以使用:

session_start();