PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】


Posted in PHP onFebruary 25, 2019

本文实例讲述了PHP登录验证功能。分享给大家供大家参考,具体如下:

登录界面

PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】

PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】

PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】

PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】

具体实现方法如下:

login.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<form method="post" action="doLogin.php">
  <input type="text" placeholder="用户名" name="username"><br><br>
  <input type="password" placeholder="密码" name="password"><br><br>
  <input type="text" placeholder="验证码" name="verifycode" class="captcha"><br><br>
  <img id="captcha_img" src="captcha.php?r=<?php echo rand();?>" alt="验证码">
  <label><a href="javascript:void(0)" rel="external nofollow" onclick="document.getElementById('captcha_img').src='captcha.php?r='+Math.random()">换一个</a> </label><br>
  <label><input type="checkbox" name="autologin[]" value="1"/>自动登录</label><br>
  <button type="submit">登录</button>
</form>
</body>
</html>

doLogin.php

<?php
header("Content-type:text/html;charset=UTF-8");
require "mysql.php";      //导入mysql.php访问数据库
session_start();        //开启会话一获取到服务器端验证码
$username=$_POST['username'];
$password=$_POST['password'];
$autologin=isset($_POST['autologin'])?1:0;   //获取是否选择了自动登录
$verifycode=$_POST['verifycode'];
$code=$_SESSION['code'];    //获取服务器生成的验证码
/*
 * 首先进行判空操作,通过后进行验证码验证,通过后再进行数据库验证。
 * 手机号码和邮箱验证可根据需要自行添加
 * */
if(checkEmpty($username,$password,$verifycode)){
  if(checkVerifycode($verifycode,$code)){
    if(checkUser($username,$password)){
      $_SESSION['username']=$username; //保存此时登录成功的用户名
      if($autologin==1){        //如果用户勾选了自动登录就把用户名和加了密的密码放到cookie里面
        setcookie("username",$username,time()+3600*24*3);  //有效期设置为3天
        setcookie("password",md5($password),time()+3600*24*3);
      }
      else{
        setcookie("username","",time()-1);  //如果没有选择自动登录就清空cookie
        setcookie("password","",time()-1);
      }
      header("location: index.php ");      //全部验证都通过之后跳转到首页
    }
  }
}
//方法:判断是否为空
function checkEmpty($username,$password,$verifycode){
  if($username==null||$password==null){
    echo '<html><head><Script Language="JavaScript">alert("用户名或密码为空");</Script></head></html>' . "<meta http-equiv=\"refresh\" content=\"0;url=login.html\">";
  }
  else{
    if($verifycode==null){
      echo '<html><head><Script Language="JavaScript">alert("验证码为空");</Script></head></html>' . "<meta http-equiv=\"refresh\" content=\"0;url=login.html\">";
    }
    else{
      return true;
    }
  }
}
//方法:检查验证码是否正确
function checkVerifycode($verifycode,$code){
  if($verifycode==$code){
    return true;
  }
  else{
    echo '<html><head><Script Language="JavaScript">alert("验证码错误");</Script></head></html>' . "<meta http-equiv=\"refresh\" content=\"0;url=login.html\">";
  }
}
//方法:查询用户是否在数据库中
function checkUser($username,$password){
  $conn=new Mysql();
  $sql="select * from user where name='{$username}' and password='{$password}';";
  $result=$conn->sql($sql);
  if($result){
    return true;
  }
  else{
    echo '<html><head><Script Language="JavaScript">alert("用户不存在");</Script></head></html>' . "<meta http-equiv=\"refresh\" content=\"0;url=login.html\">";
  }
  $conn->close();
}
//方法:手机格式验证
function checkPhoneNum($phonenumber){
  $preg="/^1[34578]{1}\d{9}$/";
  if(preg_match($preg,$phonenumber)){
    return ture; //验证通过
  }else{
    echo '<html><head><Script Language="JavaScript">alert("手机号码格式有误");</Script></head></html>' . "<meta http-equiv=\"refresh\" content=\"0;url=login.html\">";//手机号码格式不对
  }
}
//方法:邮箱格式验证
function checkEmail($email){
  $preg = '/^(\w{1,25})@(\w{1,16})(\.(\w{1,4})){1,3}$/';
  if(preg_match($preg, $email)){
    return true;
  }else{
    echo '<html><head><Script Language="JavaScript">alert("y邮箱格式有误");</Script></head></html>' . "<meta http-equiv=\"refresh\" content=\"0;url=login.html\">";
  }
}

logout.php

<?php
//退出登录并跳转到登录页面
unset($_SESSION['username']);
setcookie("username","",time()-1);  //清空cookie
setcookie("password","",time()-1);
header("location: login.html ");

index.php

<?php
session_start();
if(empty($_COOKIE['username'])&&empty($_COOKIE['password'])){
  if(isset($_SESSION['username']))
    echo "登录成功,欢迎您".$_SESSION['username']."<a href='logout.php'>退出登录</a>";
  else
    echo "你还没有登录,<a href='login.html'>请登录</a>";
}
else
  echo "登录成功,欢迎您:".$_COOKIE['username']."<a href='logout.php'>退出登录</a>";

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP实现的生成静态HTML速度快类库
Mar 31 PHP
php下mysql数据库操作类(改自discuz)
Jul 03 PHP
ionCube 一款类似zend的PHP加密/解密工具
Jul 25 PHP
ThinkPHP的模版中调用session数据的方法
Jul 01 PHP
php发送html格式文本邮件的方法
Jun 10 PHP
分享50个提高PHP执行效率的技巧
Dec 26 PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 PHP
PHP查询大量数据内存耗尽问题的解决方法
Oct 28 PHP
php中static和const关键字用法分析
Dec 07 PHP
基于PHP实现栈数据结构和括号匹配算法示例
Aug 10 PHP
PHP chunk_split()函数讲解
Feb 12 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
Oct 10 PHP
PHP封装的分页类与简单用法示例
Feb 25 #PHP
PHP实现的用户注册表单验证功能简单示例
Feb 25 #PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
Feb 25 #PHP
Laravel核心解读之异常处理的实践过程
Feb 24 #PHP
PHP通过GD库实现验证码功能示例
Feb 23 #PHP
php中file_get_contents()函数用法实例
Feb 21 #PHP
PHP基于mcript扩展实现对称加密功能示例
Feb 21 #PHP
You might like
php下使用无限生命期Session的方法
2007/03/16 PHP
php 无法载入mysql扩展
2010/03/12 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
PHP生成可点击刷新的验证码简单示例
2016/05/13 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
thinkphp5使用无限极分类
2019/02/18 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
Python引用模块和查找模块路径
2016/03/17 Python
Python使用pickle模块存储数据报错解决示例代码
2018/01/26 Python
使用PyCharm创建Django项目及基本配置详解
2018/10/24 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
python双向链表原理与实现方法详解
2019/12/03 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
python输出pdf文档的实例
2020/02/13 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
Regatta官网:英国最受欢迎的户外服装和鞋类品牌
2019/05/01 全球购物
银行金融服务方案
2014/06/11 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
一年级小学生评语大全
2014/12/25 职场文书
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技