2012-01-01 131 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()。