通过ajax设置php会话

时间:2012-01-01 17:13:06

标签: php session

我正在尝试构建我的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中的UserID

可能这不正确,因为必须在任何输出之前设置会话,但如果我尝试回显$_SESSION['UserID'] = $UserID;行,则会正确显示会话变量。

3 个答案:

答案 0 :(得分:5)

您需要首先启动会话,例如session_start()。然后只有您可以访问会话变量。看看这个简单的例子,它可能会对你有所帮助:

<强> aj.php

<script src="jquery.js"></script>
<script type="text/javascript">
$(document).ready( function(){
    $.ajax({
        type : 'GET',
        url : 'sess.php',
        data: {
            user : 'guna',

              },
        success : function(data){
                       alert(data);
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) 
        {alert ("Error Occured");}
                 });


});
</script>
</html>

sess.php

<?php
session_start();
$_SESSION['user']=$_GET['user'];
echo $_SESSION['user'];
?>  

正如其他人指出的那样,你也可以在阅读会话变量的页面中检查session_start()。

答案 1 :(得分:3)

当我遇到这种问题时,解决它的问题是使用exit();

<?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";
    exit();
} else {
    echo "ERROR";
}
?>

答案 2 :(得分:0)

更好地检查home.php中是否存在session_start()。如果没有这个,您将无法读取会话数据。

当您执行echo $_SESSION['UserID'] = $UserID;时,您将在同一行分配和访问,因此它显然可以正常工作。