Установить php сессию через ajax - PullRequest
4 голосов
/ 01 января 2012

Я пытаюсь создать свою систему входа в систему 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"], я получаю следующую ошибку:

Примечание: неопределенный индекс: UserID в C: \ xampp \ htdocs \ webname \ resources \ templates \ headerHome.php в строке 23

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

Ответы [ 3 ]

5 голосов
/ 01 января 2012

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

3 голосов
/ 01 января 2012

Когда у меня возникла такая проблема, то, что решило ее, использовало 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 голосов
/ 01 января 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...