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 />
密&nbsp;&nbsp;&nbsp;码:<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验证用户登录例子-学习笔记的更多相关文章

  1. python 全栈开发,Day119(Flask初识,Render Redirect HttpResponse,request,模板语言 Jinja2,用户登录例子,内置Session)

    一.Flask初识 首先,要看你学没学过Django 如果学过Django 的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分 三大主流Web框架对比 ...

  2. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  3. 单点登录CAS使用记(三):实现自定义验证用户登录

    问题: CAS自带的用户验证逻辑太过简单,如何像正常网站一样,通过验证DB中的用户数据,来验证用户以及密码的合法性呢? 方案1:CAS默认的JDBC扩展方案: CAS自带了两种简单的通过JDBC方式验 ...

  4. django-自定义用户登录(个人笔记)

    django自定义用户登录(个人笔记) 函数说明 1. render()函数:对用户请求做出响应 2. path()函数:定义路由 3. create()函数:增加数据表记录 配置settings.p ...

  5. MVC4项目中验证用户登录一个特性就搞定

    在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...

  6. MVC4验证用户登录特性实现方法

    在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...

  7. 转:C4项目中验证用户登录一个特性就搞定

    转:C4项目中验证用户登录一个特性就搞定   在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性.     // 摘要:    //     表示一个特性,该特性用于限制调用 ...

  8. .net MVC使用Session验证用户登录(转载)

    .net MVC使用Session验证用户登录   用最简单的Session方式记录用户登录状态 1.添加DefaultController控制器,重写OnActionExecuting方法,每次访问 ...

  9. How to use the windows active directory to authenticate user via logon form 如何自定义权限系统,使用 active directory验证用户登录

    https://www.devexpress.com/Support/Center/Question/Details/Q345615/how-to-use-the-windows-active-dir ...

随机推荐

  1. Unity3d入门 - 关于unity工具的熟悉

    上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...

  2. python核心编程第二版练习题答案

    2-5 #写一个while循环,输出整型为0~10 a=0while a<11: print a a+=1 #写一个for循环重复以上操作 for i in range(11): print i ...

  3. jsp中出现onclick函数提示Cannot return from outside a function or method

    在使用Myeclipse10部署完项目后,原先不出错的项目,会有红色的叉叉,JSP页面会提示onclick函数错误 Cannot return from outside a function or m ...

  4. 神经网络、logistic回归等分类算法简单实现

    最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...

  5. C++随笔:.NET CoreCLR之corleCLR核心探索之coreconsole(2)

    这篇文章是上篇的续集,本文将会继续介绍coreconsole.cpp里面的逻辑.也许大家会看一些CLR的书,我承认我没有看过,因为我觉得一个人,他再NB,那也是他自己的眼光,而且说句难听的,CLR也不 ...

  6. CSS 3学习——transition 过渡

    以下内容根据官方规范翻译以及自己的理解整理. 1.介绍 这篇文档介绍能够实现隐式过渡的CSS新特性.文档中介绍的CSS新特性描述了CSS属性的值如何在给定的时间内平滑地从一个值变为另一个值. 2.过渡 ...

  7. 如何用Java类配置Spring MVC(不通过web.xml和XML方式)

    DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置方式, XML看起来太累, 冗长繁琐. 还好借助于Servl ...

  8. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  9. [转载]SQL语句中的日期计算

    1. 本月的第一天SELECT  DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0) 2. 本月的最后一天SELECT  dateadd(ms,-3,DATEADD( ...

  10. IOS开发基础知识--碎片51

    1:https关闭证书跟域名的验证 AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy]; securityPolic ...