PHP简单的登录这是我的控制器类登录检查部分与PDO
案 'checkLogin':
$username = isset($_REQUEST['username']) ? trim($_REQUEST['username']) : "";
$password = isset($_REQUEST['password']) ? trim($_REQUEST['password']) : "";
try{
$login = $user->login($username,$password);
if ($login === false) {
throw new Exception("username or password is wrong");
}else {
$_SESSION['id'] = $login;
header('Location: index.php');
}
}
catch(Exception $ex){
$errMsg = $ex->getMessage();
$view->render('view/login.php', array('errMsg' => $errMsg));
}
break;
的usermodel功能
这是我的检查用户模型功能用户名和密码。
public function login($username,$password){
$username = strip_tags(stripslashes(mysql_real_escape_string($username)));
$password = strip_tags(stripslashes(mysql_real_escape_string($password)));
$stmt = $this->db->con->prepare("SELECT `password`, `id` FROM `user` WHERE `username` = ?");
$stmt->bindValue(1, $username);
try{
$stmt->execute();
$data = $stmt->fetch();
$stored_password = $data['password'];
$id = $data['id'];
if($stored_password === md5($password)){
return $id;
}else{
return false;
}
}catch(PDOException $e){
echo $e->getMessage();
}
}
请告诉我,这是正确的。此代码为我工作。 我正在使用它来实现基本的MVC模式登录。
我有一些代码从这里 http://www.sunnytuts.com/article/login-and-registration-with-object-oriented-php-and-pdo
一些提示:MySQL扩展已过时。删除对'mysql_real_escape_string()','strip_tags()'和'stripslashes()'的函数调用。他们是不必要的,也限制了用户的密码!无论如何,您正在使用准备好的语句的PDO,所以您不需要转义。 MD5不应该用于密码散列。切换到bcrypt或scrypt。你也应该用盐。 – ComFreek
这与MVC无关。除了@ComFreek列出的问题之外,您还完全违反了[SoC](https://en.wikipedia.org/wiki/Separation_of_concerns),特别是关于表示层和模型层之间的鸿沟。用户之间的分离请求响应处理与表示层。 –
关于“如何在MVC中登录用户”,可能[this](http://stackoverflow.com/a/16650437/727208)或[this](http://stackoverflow.com/a/16997200/727208)可能一些启发。 –