Я использую следующий код Ajax для входа пользователя, передавая данные формы, введенные на мою страницу validate_login.php:данные эхо-сессии в ajax?
<script type="text/javascript">
$(document).ready(function() {
$(document).on('click', '#submit', function() {
var myusername = $("#myusername").val();
var mypassword = $("#mypassword").val();
if (myusername == null || myusername == "" || mypassword == null || mypassword == "") {
if (myusername == null || myusername == "") { document.forms["form"]["myusername"].style.border = "2px solid #963634";}
if (mypassword == null || mypassword == "") { document.forms["form"]["mypassword"].style.border = "2px solid #963634";}
$(".home_column").effect("shake");
} else {
// Returns successful data submission message when the entered information is stored in database.
$.post("include/validate_login.php", {
username1: myusername,
password1: mypassword
}, function(data) {
if(data == 'login_wrong') {
$(".home_column").flip({
direction:'lr',
color: 'rgba(138, 138, 138, 0.2)',
content:'<h21>Incorrect Login Details</h21>'
})
setTimeout(
function()
{
$(".home_column").revertFlip()
}, 2500); }else{
if(data == 'login_success') {
$(".home_column").flip({
direction:'lr',
color: 'rgba(138, 138, 138, 0.2)',
content:'<h21>Hello <? echo $_SESSION['username']; ?></h21><br/><br/><h21>Login In...</h21>'
})
setTimeout(
function()
{
window.location = 'dashboard.php';
}, 2500);
} }
$('#form')[0].reset(); // To reset form fields
});
}
});
});
</script>
Я хочу обратить ваше внимание на эту часть моего кода:
if(data == 'login_success') {
$(".home_column").flip({
direction:'lr',
color: 'rgba(138, 138, 138, 0.2)',
content:'<h21>Hello <? echo $_SESSION['username']; ?></h21><br/><br/><h21>Login In...</h21>'
})
то, что я делаю, передает данные формы на мою php-страницу validate_login.php, это запускает запрос MySQL, чтобы проверить, совпадают ли имя пользователя и пароль. Если они это сделают, то login_success будет эхом, и это значение будет передано обратно на мой сценарий ajax в качестве данных. Это все работает нормально, пользователь вошел в систему, и он должен повторить имя пользователя, чтобы сказать «Hello Mark Login In ...»
Я пытаюсь сделать это, используя сеанс, который является именем пользователя, и я определить это в моей validate_login.php странице здесь:
session_start();
$query = "SELECT * FROM $tbl_name WHERE user_name = '$username' UNION
SELECT * FROM $tbl_name2 where user_name = '$username'";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_assoc($result);
$hashed_pass = crypt($password, $Blowfish_Pre . $row['salt'] . $Blowfish_End);
if(mysql_num_rows($result) > 0) { // Check Username Exists
if($hashed_pass === $row['user_password_hash']) { // Check Password is valid
$_SESSION['id']=$row['user_id']; //Start User Session
$_SESSION['user']=$username;
$_SESSION['username']=$row['user_first_name'];
$_SESSION['username2']=$row['user_last_name'];
$_SESSION['allowance']=$row['allowance'];
$_SESSION['privelleges']=$row['privelleges'];
$sql2 = mysql_query("UPDATE $tbl_name2 SET user_failed_logins = '0', user_status = 'online' WHERE user_name = '".$username."'");
$result2=mysql_query($sql2);
$sql3 = mysql_query("UPDATE $tbl_name SET user_failed_logins = '0', user_status = 'online' WHERE user_name = '".$username."'");
$result3=mysql_query($sql2); //Start User Session
echo "login_success";
по какой-то причине, название будет только иногда будет отображаться, а затем в других случаях это не будет. Я бы сказал, что это 50/50.
Есть ли причина для этого? Может кто-нибудь покажет мне, что я делаю неправильно?
Спасибо,
PHP-код выполняется на сервере. Итак, если $ _SESSIOn пуст, это все равно так после вашего ajax-вызова (потому что он был отправлен клиенту перед вызовом, когда исходная страница была передана). – Burki
Еще один подсказку, хотя не относится к теме: функции mysql_ * устарели. Настоятельно рекомендуется не использовать их. – Burki
@Burki благодарит вас за ваши комментарии, есть ли способ вокруг этого? –