Я пытаюсь создать мою систему входа в систему 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
Вероятно, это неверно, потому что сеанс должен быть установлен перед любым выходом, но если я попытаюсь выполнить echo $_SESSION['UserID'] = $UserID;
строка правильно отображает переменную сеанса.
Когда у меня возникла такая проблема, то, что ее решило, это использовать 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"; } ?>
Сначала необходимо запустить сеанс, например 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 () на странице, где вы читаете переменные сеанса.
Лучше проверьте, присутствует ли session_start()
в home.php. Без этого вы не сможете прочитать данные сеанса.
Когда вы выполняете echo $_SESSION['UserID'] = $UserID;
вы будете назначать и получать доступ в одной строке, поэтому он, очевидно, будет работать.