简体   繁体   English

jQuery AJAX对PHP登录的请求无法正常工作

[英]jQuery AJAX request to PHP login not working properly

So I'm trying to do an inline login whenever the PHP $_SESSION['logged_in'] variable is not set. 因此,每当未设置PHP $ _SESSION ['logged_in']变量时,我都尝试进行内联登录。 (this variable is set when I log a user in) The problem is that I can get my script to work when using multiple pages with header redirects, but trying to remain on the same page via AJAX requests to the login.php file is failing. (当我登录用户时设置了此变量)问题是当使用带有标题重定向的多个页面时,我可以使我的脚本正常工作,但是尝试通过对login.php文件的AJAX请求保留在同一页面上失败。 Here's a look at my code. 这是我的代码。

the login form itself... 登录表单本身...

<?php 
      include ('global.inc.php');
        if ( $_SESSION['logged_in'] == 1 ) {
            echo '<form id="addNoteForm"><label for="title">Title</label><input id="noteTitle" type="text" class="form-control" name="title"/>
                <label for="content">Content</label><textarea id="noteContent" class="form-control" rows="20" name="content"></textarea>
                <input type="submit" id="addNoteButton" class="btn btn-primary" value="Add Note" />
                <button class="btn" onclick="cancelAddNote()">Cancel</button>
            </form>';
        }
        else {

            echo '<form id="loginForm" action="login.php" method="get" role="form">
                <div class="form-group">
                <label for="username">Username</label>
                <input id="loginUsername" type="text" class="form-control" name="username" value="'.$username.'">
                </div>
                <div class="form-group">
                <label for="password">Password</label>
                <input id="loginPassword" type="password" class="form-control" name="password" value="'.$password.'">
                </div>
                <button type="submit" class="btn btn-default" name="submit-login">Login</button>
                </form>';
            }
        ?>

jQuery AJAX request script jQuery AJAX请求脚本

  jQuery(function() {
    jQuery('#loginForm').submit(function(e){
        e.preventDefault();

        var username = jQuery('#loginUsername').val();
        var password = jQuery('#loginPassword').val();

        jQuery.ajax({
            type: 'GET',
            url: 'login.php',
            data: 'username='+username+'&password='+password,
            success: function(data) {
                setTimeout(function(){
                   window.location.reload();
                }, 1000);

            },
            error: function(data) {
                console.log('AJAX login failed. Returned data = '+data);
            }
        });
    });
});

here is the login.php file 这是login.php文件

<?php

        header("Access-Control-Allow-Origin: *");
        require_once (__DIR__.'/includes/global.inc.php');

        $userTools = new UserTools();

        if ( isset($_GET['username']) ) {
            $username = $_GET['username'];
            $password = $_GET['password'];
        }

        if ( $userTools->login($username, $password) ) {
            return true;
        }

        else {
            return false;
        }
    ?>

the global.inc.php file global.inc.php文件

require_once (__DIR__.'/../classes/Note.class.php');
require_once (__DIR__.'/../classes/NoteTools.class.php');
require_once (__DIR__.'/../classes/User.class.php');
require_once (__DIR__.'/../classes/UserTools.class.php');
require_once (__DIR__.'/../classes/Database.class.php');


// connect to the database
$db = new Database();

// initialize UserTools object
$userTools = new UserTools();

// start the session
session_start();

// refresh session variables if already logged in
if ( isset($_SESSION['logged_in'])) {
    $user = unserialize($_SESSION['user']);
    $_SESSION['user'] = serialize($userTools->getUser($user->id));
}

and finally, the login script of my UserTools.class.php 最后是我的UserTools.class.php的登录脚本

public function login($username, $password) {

        $hashedPassword = md5($password);

        $database = new Database();
        $database->query('SELECT * FROM users WHERE username = :username AND password = :password');

        $database->bind(':username', $username);
        $database->bind(':password', $hashedPassword);

        $user = $database->single();

        $user = new User($user);

        if ( $database->rowCount() == 1) {
            $_SESSION['user'] = serialize($user);
            $_SESSION['login_time'] = time();
            $_SESSION['logged_in'] = 1;
            return true;
        }

        else {
            return false;
        }
    }

I feel like I'm overlooking something minor here and need a fresh set of eyes to take a look at it. 我觉得自己在这里俯瞰着一些小事,需要一双崭新的眼睛才能看到。 Like I said before, when I had a separate login.php file that upon successful login did a header redirect to a "welcome page", I had no problems with it. 就像我之前说过的,当我有一个单独的login.php文件,该文件在成功登录后将标头重定向到“欢迎页面”时,它没有任何问题。 I think I'm having an issue with how I'm returning data to my jQuery function through AJAX. 我想我如何通过AJAX将数据返回到jQuery函数时遇到问题。 I dunno. 我不知道。 Any help is GREATLY appreciated! 任何帮助是极大的赞赏!

Your are setting the ajax data in the wrong way, it is a array of objects and no a string 您正在以错误的方式设置ajax数据,它是对象数组,没有字符串

So, instead of 所以,代替

data: 'username='+username+'&password='+password, 数据:'username ='+ username +'&password ='+ password,

the data should be: 数据应为:

data : { username : username, password : password } 数据:{用户名:用户名,密码:密码}

Turns out it was a modsec issue set on the server by my web host. 原来这是我的Web主机在服务器上设置的modsec问题。 All is working now. 现在一切正常。 Thanks to everyone for their help! 感谢大家的帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM