我检查了这个问题的公认答案,但是没有帮助
我试图使一个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.php和completeOrder.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();