PHP / AJAX登录需要很长时间

时间:2012-10-08 10:38:45

标签: php javascript mysql ajax

我继承了一个网站,要求用户也可以登录。

登录使用Ajax和PHP只有这个登录过程可能需要一分钟才能完成,只有4000个用户注册。

这可能是由于登录的编码方式吗?

AJAX

 <form name="login-form" onsubmit="return false">
            <input type="text" id="the_username" value="Username" onfocus="emptyUsername(this);" onblur="clickrecall(this,'Username')"  class="focusfield input push"  />
            <input type="password" id="the_password" value="Password" class="input" onfocus="emptyPassword(this);" onblur="clickrecall(this,'Password')" /> 
            <span id="dialog-login-fail" title="Login failed"></span>
            <input type="submit" onclick="javascript:void(0);"  id="loginBtnBre" class="sign-in signin-submit-btn" value="Login Now" /> 
 </form>

PHP

<?php
require 'config.inc.php';

foreach($_POST as $k=>$v) 
{
$_POST[$k] = trim($v);
}

if(!isset($_POST['theusername']) or !isset($_POST['thepassword']))
{
    print "Please use all fields";
}elseif(empty($_POST['theusername'])){
    print "Please enter a username";
}elseif(empty($_POST['thepassword'])){
    print "Please enter a password";
}elseif($_POST['theusername'] == "username" && $_POST['thepassword'] == "password")
{
    print "Password & User cannot be the ones already listed";
}elseif(!preg_match("/^[a-z0-9]+$/i", $_POST['theusername']))
{
    print "Please use only characters and numbers for username, no spaces, dashes or others!";
}else{

    $password = md5($_POST['thepassword']);
    $user = $_POST['theusername'];

    $loginVar = $usersClass->login($user, $password);

    if(is_array($loginVar))
    {
        $_SESSION['loggedIn'] = $loginVar; 
        @session_regenerate_id(true);

        print "success";

    }else{
        print "Whoops, something went wrong! Try again.";
    }
}

?>

查询

public function login($username, $password)
{

    $rs = mysql_query("SELECT `id`,`active` from `$this->usersTable` WHERE 
        `username` = '".mysql_real_escape_string($username)."' AND 
        `password` = '".mysql_real_escape_string($password)."'");

    if($rs) {
        $row = @mysql_fetch_object($rs);

            return $this->userInfo($row->id);

    }else{
        return false;
    }

3 个答案:

答案 0 :(得分:1)

首先更改浏览器以确保它不是浏览器的问题(很少见,但有时仍会发生)。

然后尝试使用PHP探查器来识别“慢”后端代码。在http://erichogue.ca/2011/03/linux/profiling-a-php-application/

上有一个很好的教程

答案 1 :(得分:0)

您可以使用firefox的firebug功能来了解是否正在发布正确的信息?我可以看到除了“登录”功能之外没有问题。 您可以回显查询并从firebug复制它并将其运行到数据库。 跟踪运行该查询所需的时间并在其上添加一些秒。查看您的数据库查询是否需要大量时间。

如果您的查询需要更多时间,那么您需要优化SQL查询

答案 2 :(得分:0)

您可能没有关于用户名或密码字段的索引

执行命令

alter table `TableName` add index `username` (`username`(500));
alter table `TableName` add index `password` (`password`(500));

在mysql提示符下,TableName是表的名称,然后再试一次。如果这样可以加快速度,请将索引调整为更合适的长度。

你真的不应该将密码作为明文存储在数据库中。至少将它们存储为散列字符串(MD5等)或更好,将它们存储为盐渍的MD5哈希值。

我会将您的选择更改为仅根据用户名选择(删除密码),然后执行其他检查以确保输入的密码与返回的行匹配。