使用ajax提交登录表单时无法设置php会话


Cannot set php session when using ajax to submit login form?

我使用以下ajax提交登录表单,而不刷新页面:

Ajax:

<script src="assets/jquery/jquery.min.js"></script>
<script type="text/javascript" src="assets/jquery/flip/jquery.flip.js"></script>
<script type="text/javascript" src="assets/jquery/flip/jquery.flip.min.js"></script>
<script src="assets/jquery/jquery-ui.js"></script>

<script type="text/javascript"> 
$(document).ready(function () {
    $("#submit").click(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: '<h2s1>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: '<h2s1>correct Login Details</h21>'
                        })
                        setTimeout(function () {
                            $(".home_column").revertFlip()
                        }, 2500);
                    }
                }
                $('#form')[0].reset(); // To reset form fields
            });
        }
    });
});
</script>

HTML表单:

<div class="home_column" id="login_box">
<div class="login_form">
<form id="form" name="form"> 
<h21>Username</h21><br/>
<input type="text" class="login_form_front" id="myusername" name="myusername" autocomplete="off"><br/>
<h21>Password</h21><br/>
<input type="password" class="login_form_front" autocomplete="off"  id="mypassword" name="mypassword">
<br/>
<input type="button" class="buttons_login" value="Login" id="submit" name="submit">
</form> 
</div>
</div>

然后执行我的validate_login.php页面:

<?php
include("config.php");
$tbl_name="internal_users";  
$tbl_name2="supplier_users";  
$username=$_POST['username1']; // Fetching Values from URL
$password=$_POST['password1'];
$username = stripslashes($username);  // Secure Values
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$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_start();  //Start User Session
$_SESSION['id']=$row['user_id'];
$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
session_write_close();
echo "login_success";
}else{
echo "login_wrong";   
}
}else{
echo "login_wrong";     
}  ?>

正如您在我的validate_login.php页面中看到的那样,我会检查用户名是否存在于数据库中,如果存在,那么我会检查密码是否匹配。

如果登录成功,我会回显"login_success",否则我回显login_error,并将此数据传递回ajax脚本。这一切都很好,我之前已经使用警报框测试了用户登录是否成功,以给出响应结果,所以我知道脚本有效,用户基本上已经登录。

我的ajax还具有一个jquery函数,在该函数中,登录表单周围的div"home_column"将翻转并显示登录成功消息或登录不成功消息。

如果登录成功消息在短暂延迟后显示,则假定用户被重定向到仪表板。

然而,当我在validate_login.php文件中添加session_start()来设置用户登录的会话时,我的jquery就不起作用了,假设div'home_column'翻转的jquery函数也不会发生,也不会重定向到仪表板。

只有当用户手动点击刷新来刷新页面时,他们才会登录并重定向到仪表板。然而,假设我的div‘home_column翻转的jquery函数仍然被忽略。

如果我去掉session_start(),这一切都很好

有人能告诉我我做错了什么吗,谢谢

我发现了这个问题的问题,因为我需要放置session_start();在我页面的顶部,而不是页面的一半。