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. 你必须知道的EF知识和经验

    注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...

  2. ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入

    原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...

  3. 【探索】无形验证码 —— PoW 算力验证

    先来思考一个问题:如何写一个能消耗对方时间的程序? 消耗时间还不简单,休眠一下就可以了: Sleep(1000) 这确实消耗了时间,但并没有消耗 CPU.如果对方开了变速齿轮,这瞬间就能完成. 不过要 ...

  4. TODO:小程序开发过程之体验者

    TODO:小程序开发过程之体验者 1. 小程序开发过程,先下载开发者并安装开发者工具,现在腾讯开放测试了,普通用户也可以登录开发者工具,如图普通用户登录为调试类型,但是只能建立无AppID的项目 如果 ...

  5. Sublime配置python开发环境

    Package Control Package Control 是Sublime 里直接安装附加插件的包管理器.可以通过以下步骤手动安装: 1.点击Preferences > Browse Pa ...

  6. android http 抓包

    有时候想开发的时候想看APP发出的http请求和响应是什么,这就需要抓包了,这可以得到一些不为人知的api,比如还可以干些“坏事”... 需要工具: Fiddler2 抓包(点击下载) Android ...

  7. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  8. 【置顶】CoreCLR系列随笔

    CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...

  9. 开源一款简单清爽的日历组件,JavaScript版的

    源码会在最后给出地址,需要的朋友自己去下载.最近项目需要做一个日程安排的功能,就是点击日历的某一天弹出一个录入页面,填完信息后保存当天的日程安排.有日程的日期会有不同的标记(比如加一个背景色啥的).网 ...

  10. 《LoadRunner12七天速成宝典》签售会2016-12-17北京

    报名地址: http://www.after615.com/actives/s?id=3141&time=1480042829608&sign=9ac8e25e9ab3cf57f613 ...