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 相关文章推荐
PHP5 面向对象(学习记录)
Dec 02 PHP
php 字符串函数收集
Mar 29 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
php中session过期时间设置及session回收机制介绍
May 05 PHP
PHP获取数组中重复最多的元素的实现方法
Nov 11 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
Jan 09 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
May 19 PHP
php生成与读取excel文件
Oct 14 PHP
php输出图像的方法实例分析
Feb 16 PHP
实例介绍PHP中zip_open()函数用法
Feb 15 PHP
laravel-admin的图片删除实例
Sep 30 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
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
php获取文件大小的方法
2014/02/26 PHP
accesskey 提交
2006/06/26 Javascript
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
2013/05/13 Javascript
JS模拟自动点击的简单实例
2013/08/08 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
node.js中的events.EventEmitter.listenerCount方法使用说明
2014/12/08 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
Element-ui tree组件自定义节点使用方法代码详解
2018/09/17 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
django中media媒体路径设置的步骤
2019/11/15 Python
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
加热夹克:RAVEAN
2018/10/19 全球购物
儿媳婚宴答谢词
2014/01/14 职场文书
大学旷课检讨书
2014/01/28 职场文书
《毛主席在花山》教学反思
2014/04/20 职场文书
庆七一活动总结
2014/08/27 职场文书
商品陈列协议书
2014/09/29 职场文书
小学运动会报道稿
2014/10/04 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python