我继承了一个网站,要求用户也可以登录。
登录使用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;
}
答案 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哈希值。
我会将您的选择更改为仅根据用户名选择(删除密码),然后执行其他检查以确保输入的密码与返回的行匹配。