【发布时间】:2014-02-10 03:58:43
【问题描述】:
我正在为一个使用 MVC 编程的项目开发登录系统,但遇到了这个错误。这是代码,问题行是#31
这个登录系统是一个教程,我一直按原样完成它。我读过 PHP 5 存在一些版本问题?不确定,希望有人可以帮助我。
问题线:
$stmt->bind_param("ss", $user, md5($pass . $this->salt));
代码:
<?php
/*
Authorization Class
deal with auth tasks
*/
class Auth
{
private $salt = 'j4H9?s0d';
/*
Constructor
*/
function __construct()
{
}
/*
Functions
*/
function validateLogin($user, $pass)
{
// access db
global $Database;
// create query
if ($stmt = $Database->prepare("SELECT * FROM users WHERE username = ? AND password = ?"))
{
$stmt->bind_param("ss", $user, md5($pass . $this->salt));
$stmt->execute;
$stmt->store_result();
// check for num rows
if ($stmt->num_rows > 0)
{
// success
$stmt->close();
return TRUE;
}
else
{
// failure
$stmt->close();
return FALSE;
}
}
else
{
die("ERROR: Could not prepare MySQLi statement.");
}
}
function checkLoginStatus()
{
if (isset($_SESSION['loggedin']))
{
return TRUE;
}
else
{
return FALSE;
}
}
function logout()
{
session_destroy();
session_start();
}
}
【问题讨论】:
-
请不要使用 MD5 散列密码。 PHP 5.5+ 有password API,如果这不是一个选项,你可以使用
crypt()和blowfish 算法作为后备。另外,不要使用全局变量来传播数据库连接。相反,您应该使用这样的东西:stackoverflow.com/a/11369679/727208(该方法可以很容易地添加到与 MySQLi 一起使用)。如果你的代码来自一些教程 - 尽快找到不同的教程。