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 小乘法表实现代码
Jul 16 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
php使用百度翻译api示例分享
Jan 31 PHP
php中switch语句用法详解
Aug 17 PHP
使用symfony命令创建项目的方法
Mar 17 PHP
微信支付开发动态链接Native支付
Jul 12 PHP
PHP 信号管理知识整理汇总
Feb 19 PHP
php出租房数据管理及搜索页面
May 23 PHP
php使用 readfile() 函数设置文件大小大小的方法
Aug 11 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
Apr 23 PHP
基于php+MySql实现学生信息管理系统实例
Aug 04 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
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
php统计数组元素个数的方法
2015/07/02 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
Laravel开启跨域请求的方法
2019/10/13 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
2014/06/26 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
Python实现带百分比的进度条
2016/06/28 Python
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
python支持多线程的爬虫实例
2019/12/21 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
Python 忽略文件名编码的方法
2020/08/01 Python
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
幼师岗位求职简历的自荐信格式
2013/09/21 职场文书
捐款活动总结
2014/08/27 职场文书
奖学金感谢信
2015/01/21 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
vue首次渲染全过程
2021/04/21 Vue.js
Golang 编译成DLL文件的操作
2021/05/06 Golang
如何理解及使用Python闭包
2021/06/01 Python
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers