2012-01-01 93 views
3

我想构建我的AJAX登录系统,但我遇到了PHP会话的一些问题。通过ajax设置php会话

这是我在使用了AJAX代码我index.php

$("#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(); 
     } 
    }); 
}); 

这是ajaxLogin.php是通过AJAX调用:

<?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"],我收到以下错误:

Notice: Undefined index: UserID in C:\xampp\htdocs\webname\resources\templates\headerHome.php on line 23

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

+0

唯一的其他解释是多个会话正在启动。检查两个页面的session_id()来验证这个 – Starx 2012-01-01 17:35:27

+0

你确定你的php.ini被设置为使用会话cookie并且路径是PHP可访问的吗?会话保存路径对于您的设置可能有误。 – Paul 2012-01-01 18:01:44

+0

@Paul你能告诉我应该如何改变php.ini以允许会话吗? – siannone 2012-01-01 18:12:15

回答

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"; 
} 
?> 
+0

仍然没有工作:( – siannone 2012-01-01 17:22:00

+0

这对我有用Tnx @Nicola – 2013-01-11 10:25:19

+0

是的,这对我来说也是松散的,如果你使用Drupal的非核心交付回调函数,在你的交货中调用'drupal_session_commit();'回调 – 2013-12-04 16:44:10

0

最好检查一下就解决了的事情,如果session_start()存在于home.php。没有这个,你将无法读取会话数据。

当你在做echo $_SESSION['UserID'] = $UserID;你会分配和访问在同一行,所以它显然会工作。

+0

'session_start()'出现在home.php – siannone 2012-01-01 17:26:13

3

您需要先启动会话,如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()。