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验证用户登录例子-学习笔记的更多相关文章
- python 全栈开发,Day119(Flask初识,Render Redirect HttpResponse,request,模板语言 Jinja2,用户登录例子,内置Session)
一.Flask初识 首先,要看你学没学过Django 如果学过Django 的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分 三大主流Web框架对比 ...
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
easyui datagrid 禁止选中行 没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...
- 单点登录CAS使用记(三):实现自定义验证用户登录
问题: CAS自带的用户验证逻辑太过简单,如何像正常网站一样,通过验证DB中的用户数据,来验证用户以及密码的合法性呢? 方案1:CAS默认的JDBC扩展方案: CAS自带了两种简单的通过JDBC方式验 ...
- django-自定义用户登录(个人笔记)
django自定义用户登录(个人笔记) 函数说明 1. render()函数:对用户请求做出响应 2. path()函数:定义路由 3. create()函数:增加数据表记录 配置settings.p ...
- MVC4项目中验证用户登录一个特性就搞定
在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...
- MVC4验证用户登录特性实现方法
在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...
- 转:C4项目中验证用户登录一个特性就搞定
转:C4项目中验证用户登录一个特性就搞定 在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用 ...
- .net MVC使用Session验证用户登录(转载)
.net MVC使用Session验证用户登录 用最简单的Session方式记录用户登录状态 1.添加DefaultController控制器,重写OnActionExecuting方法,每次访问 ...
- 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 ...
随机推荐
- 黑云压城城欲摧 - 2016年iOS公开可利用漏洞总结
黑云压城城欲摧 - 2016年iOS公开可利用漏洞总结 作者:蒸米,耀刺,黑雪 @ Team OverSky 0x00 序 iOS的安全性远比大家的想象中脆弱,除了没有公开的漏洞以外,还有很多已经公开 ...
- java基础_集合List与Set接口
List接口继承了Collection的方法 当然也有自己特有的方法向指定位置添加元素 add(索引,添加的元素); 移除指定索引的元素 remove(索引) 修改指定索引的元素 set ...
- Ubuntu 16.10 安装byzanz截取动态效果图工具
1.了解byzanz截取动态效果图工具 byzanz能制作文件小,清晰的GIF动态效果图,不足就是,目前只能通过输入命令方式来录制. byzanz主要的参数选项有: -d, --duration=SE ...
- 两个 viewports 的故事-第二部分
原文链接:A tale of two viewports — part two 译者:nzbin 在这个迷你系列中,我将解释 viewports 和各种重要元素的宽度是如何工作的,比如说 <ht ...
- Java 时间类-Calendar、Date、LocalDate/LocalTime
1.Date 类 java.util.Date是一个"万能接口",它包含日期.时间,还有毫秒数,如果你只想用java.util.Date存储日期,或者只存储时间,那么,只有你知道哪 ...
- ASP.NET Core 中文文档目录
翻译计划 五月中旬 .NET Core RC2 如期发布,我们遂决定翻译 ASP.NET Core 文档.我们在 何镇汐先生. 悲梦先生. 张仁建先生和 雷欧纳德先生的群中发布了翻译计划招募信息,并召 ...
- 流程表单中js如何清空SheetUser控件数据?
昨天有人问我js怎么清空.我试了试,发现简单的赋给他空值,并没有用.只能给他赋一个真实存在的值才有用.于是跟踪了一下他的删除按钮. 效果如下 使用场景:可以根据字段的不同类别变更人员. js代码如下, ...
- win7下利用ftp实现华为路由器的上传和下载
win7下利用ftp实现华为路由器的上传和下载 1. Win7下ftp的安装和配置 (1)开始->控制面板->程序->程序和功能->打开或关闭Windows功能 (2)在Wi ...
- [异常特工]android常见bug跟踪
前言 对app的线上bug的收集(友盟.云捕等)有时会得到这样的异常堆栈信息:没有一行代码是有关自身程序代码的.这使得对bug的解决无从下手,根据经验,内存不足OOM,Dialog关闭,ListVie ...
- 凭吊一下ASP.NET 5,然后跨平台,越跨越开心
ASP.NET 5 is dead ASP.NET 5在今年早些时候被宣判死刑了.但是这并不影响我们之前在ASP.NET 5乃至ASP.NET MVC平台上的经验累积--没错,微软改名部门又立功了!他 ...