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更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
PHP实现时间轴函数代码
Oct 08 PHP
php中inlcude()性能对比详解
Sep 16 PHP
关于js和php对url编码的处理方法
Mar 04 PHP
php跨服务器访问方法小结
May 12 PHP
PHP利用APC模块实现大文件上传进度条的方法
Oct 29 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
thinkPHP下的widget扩展用法实例分析
Dec 26 PHP
从性能方面考虑PHP下载远程文件的3种方法
Dec 29 PHP
php截取视频指定帧为图片
May 16 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
php实用代码片段整理
Nov 12 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
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
PHP session有效期问题
2009/04/26 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
浅析十款PHP开发框架的对比
2013/07/05 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
javascript 贪吃蛇实现代码
2008/11/22 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
AngularJS基础知识
2014/12/21 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
2017/10/24 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
[03:00]2018完美盛典_最佳英雄奖
2018/12/17 DOTA
python3实现磁盘空间监控
2018/06/21 Python
Python字符串对象实现原理详解
2019/07/01 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
抽象类和接口的区别
2012/09/19 面试题
大学四年个人自我小结
2014/03/05 职场文书
销售队伍口号
2014/06/11 职场文书
教师节活动总结
2014/08/29 职场文书
2014年法院工作总结
2014/11/24 职场文书
教导主任个人总结
2015/03/03 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
oracle索引总结
2021/09/25 Oracle