2012-01-01 2 views
3

Я пытаюсь создать мою систему входа в систему AJAX, но у меня возникают некоторые проблемы с сеансами PHP.Установить сеанс php через ajax

Это код 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

+0

Вы уверены, что ваш php.ini настроен на использование файлов cookie сеансов, а путь является доступным для PHP? Может быть, вероятность того, что путь сохранения сеанса неверен для вашей настройки. – Paul

+0

@Paul Можете ли вы рассказать мне, как изменить php.ini, чтобы разрешить сеансы? – siannone

ответ

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

+0

Это сработало для меня. Tnx @Nicola –

+0

Yup, это тоже сработало для меня. Если вы используете Drupal с обратным вызовом неосновной доставки, вызовите 'drupal_session_commit();' в вашей доставке callback. –

0

лучше проверить, если session_start() присутствует в home.php. Без этого вы не сможете прочитать данные сеанса.

Когда вы делаете echo $_SESSION['UserID'] = $UserID;, вы назначаете и получаете доступ к одной и той же строке, поэтому он, очевидно, будет работать.

+0

'session_start()' присутствует в home.php – siannone

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() на странице, где вы читаете переменные сеанса.