PHP验证用户登录例子-学习笔记
1.基本流程:
2.UML类图:
3.PHP代码:
3.1 index.php
<?php
/**
* Created by PhpStorm.
* User: andy
* Date: 16-11-25
* Time: 下午10:13
*/
session_start();
$validate_username=isset($_SESSION['validate_username'])?$_SESSION['validate_username']:'';
$validate_password=isset($_SESSION['validate_password'])?$_SESSION['validate_password']:'';
?>
<html>
<head>
<meta charset="utf-8"/>
<title>用户登录</title>
</head>
<body>
<h1>用户登录</h1>
<form action="login.php" method="post">
用户名:<input type="text" name="username" value="" /><font color="red">
<?php echo $validate_username; ?>
</font><br /><br />
密 码:<input type="password" name="password" value="" /><font color="red">
<?php echo $validate_password; ?>
</font><br /><br />
<input type="submit" value="提交" />
</form>
</body>
</html>
3.2 login.php
<?php
/**
* Created by PhpStorm.
* User: andy
* Date: 16-11-25
* Time: 下午10:20
*/
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
$user = new User($username, $password);
//判断登录是否成功
try{
Validate::validateUser($user);
//验证通过,登录成功
$_SESSION['username']=$username;
header('location:main.php');
}catch (MyException $me){
//验证失败
header('location:index.php');
}
/**
* 自动加载类
* @param $class
* @return string
*/
function __autoload($class)
{
$file = __DIR__ . '/' . strtolower($class) . '.php';
if (is_file($file)) {
include_once $file;
}
return '';
}
3.3 myexception.php
<?php
/**
* Created by PhpStorm.
* User: andy
* Date: 16-11-25
* Time: 下午10:50
*/
class MyException extends Exception
{
}
3.4 user.php
<?php
/**
* Created by PhpStorm.
* User: andy
* Date: 16-11-25
* Time: 下午10:29
*/
class User
{
private $username = '';
private $password = '';
function __construct($username, $password)
{
$this->username = $username;
$this->password = $password;
}
/**
* 返回用户名
* @return string
*/
public function getUsername(): string
{
return $this->username;
}
/**
* 返回密码
* @return string
*/
public function getPassword(): string
{
return $this->password;
}
}
3.5 validate.php
<?php
/**
* 验证类
* Created by PhpStorm.
* User: andy
* Date: 16-11-25
* Time: 下午10:34
*/
class Validate
{
/**
* 验证用户
* @param User $user
* @throws MyException
*/
static function validateUser(User $user)
{
//print_r($user);
$username = $user->getUsername();
$password = $user->getPassword();
unset($_SESSION['validate_username'],$_SESSION['validate_password']);
//验证用户名
try {
self::validateUsername($username);
}catch (MyException $me) {
$_SESSION['validate_username']=$me->getMessage();
}
//验证密码
try {
self::validatePassword($password);
}catch (MyException $me) {
$_SESSION['validate_password']=$me->getMessage();
}
if(isset($me)){
throw $me;
}
}
/**
* 验证用户名
* @param $username
* @throws MyException
*/
static private function validateUsername($username)
{
$lem = strlen($username);
if ($lem < 3) {
//抛出异常
throw new MyException('用户名长度不能小于3位', E_USER_ERROR);
} elseif ($lem > 8) {
throw new MyException('用户名长度不能超过8位', E_USER_ERROR);
}
}
/**
* 验证密码
* @param $password
* @throws MyException
*/
static private function validatePassword($password)
{
$lem = strlen($password);
if ($lem < 3) {
//抛出异常
throw new MyException('密码长度不能小于3位', E_USER_ERROR);
} elseif ($lem > 8) {
throw new MyException('密码长度不能超过8位', E_USER_ERROR);
}
}
}
<?php /** * 验证类 * Created by PhpStorm. * User: andy * Date: 16-11-25 * Time: 下午10:34 */ class Validate { /** * 验证用户 * @param User $user * @throws MyException */ static function validateUser(User $user) { //print_r($user); $username = $user->getUsername(); $password = $user->getPassword(); unset($_SESSION['validate_username'],$_SESSION['validate_password']); //验证用户名 try { self::validateUsername($username); }catch (MyException $me) { $_SESSION['validate_username']=$me->getMessage(); } //验证密码 try { self::validatePassword($password); }catch (MyException $me) { $_SESSION['validate_password']=$me->getMessage(); } if(isset($me)){ throw $me; } } /** * 验证用户名 * @param $username * @throws MyException */ static private function validateUsername($username) { $lem = strlen($username); if ($lem < 3) { //抛出异常 throw new MyException('用户名长度不能小于3位', E_USER_ERROR); } elseif ($lem > 8) { throw new MyException('用户名长度不能超过8位', E_USER_ERROR); } } /** * 验证密码 * @param $password * @throws MyException */ static private function validatePassword($password) { $lem = strlen($password); if ($lem < 3) { //抛出异常 throw new MyException('密码长度不能小于3位', E_USER_ERROR); } elseif ($lem > 8) { throw new MyException('密码长度不能超过8位', E_USER_ERROR); } } }