【发布时间】:2012-01-31 10:25:47
【问题描述】:
我正在尝试构建我的 AJAX 登录系统,但我遇到了一些 PHP 会话问题。
这是我在index.php 中使用的 AJAX 代码:
$("#buttonLogin").click(function(){
$.post("<?php echo $AJAX ?>/ajaxLogin.php",{
Username : $("#loginUsername").val(),
Password : $("#loginPassword").val()
},
function(result){
if(result == "OK"){
window.location.href = "<?php echo $PUBLIC?>/home.php";
} else {
$("#loginMessageError").show();
}
});
});
这是通过 AJAX 调用的 ajaxLogin.php:
<?php
require_once("../settings.php");
require_once($ABS_ENGINE."/classUser.php");
$user = new User();
if($user->loginUser($_POST["Username"], $_POST["Password"])){
$UserID = $user->getUserId($_POST["Username"]);
session_start();
$_SESSION['UserID'] = $UserID;
echo "OK";
} else {
echo "ERROR";
}
?>
当我在 home.php 并尝试回显 $_SESSION["UserID"] 时,我收到以下错误:
注意:未定义索引:第 23 行 C:\xampp\htdocs\webname\resources\templates\headerHome.php 中的用户 ID
这可能是不正确的,因为会话必须在任何输出之前设置,但如果我尝试回显$_SESSION['UserID'] = $UserID; 行,它的会话变量会正确显示。
【问题讨论】:
-
唯一的其他解释是正在启动多个会话。检查两个页面的 session_id() 以验证这一点
-
您确定您的 php.ini 设置为使用会话 cookie 并且路径是 PHP 可访问的吗?会话保存路径可能不适合您的设置。
-
@Paul 你能告诉我应该如何更改 php.ini 以允许会话吗?
-
@MaterMorbi php.net/manual/en/session.configuration.php 你去吧,根据你的需要设置它们,阅读文档,你会弄明白的。还要在会话部分阅读 php.ini 中的 cmets。
-
@MaterMorbi,你检查过这两个页面的 session_id()..