23 七天免登录案例

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 路老师分享了PHP语言的知识,帮助大家入门并深入了解PHP。本文通过一个“七天免登录”的案例,详细介绍了从创建用户表、登录页面到登录检测和退出登录的完整过程。代码示例详尽,适合初学者学习。

 有胆量你就来跟着路老师卷起来! -- 纯干货,技术知识分享

路老师给大家分享PHP语言的知识了,旨在想让大家入门PHP,并深入了解PHP语言。

image.gif 编辑


上文讲述了cookie的概念,创建,获取,销毁以及生命周期后,我们利用本文来实现一个小的案例,实现七天免登录的案例。

七天免登录功能案例

1 创建users用户表,并添加一个用户。

CREATE TABLE `users` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 其中密码是md5处理过的密文
insert into `users` values('1','test','098f6bcd4621d373cade4e832627b4f6');

image.gif

image.gif 编辑

2 创建登录页面login.php:

<!DOCTYPE html>
<html lang="en" class="is-centered is-bold">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>登录页面</title>
  <link href="css/login.css" rel="stylesheet">
</head>
<body>
  <section style="background: transparent;">
    <form class="box py-3 px-4 px-2-mobile"  role="form"  method="post" action="checklogin.php" onsubmit="return check()" >
   <div class="is-flex is-column is-justified-to-center">
    <h1 class="title is-3 mb-a has-text-centered">
        登录
    </h1>
    <div class="inputs-wrap py-3">
      <div class="control">
        <input class="input" type="text" id="username" name="username" placeholder="用户名"   required></input>
      </div>
      <div class="control">
        <input class="input" type="password" id="password" name="password" placeholder="密码"   required></input>
      </div>
      <div class="control">
        <button class="button is-submit is-primary is-outlined" type="submit">
          提交
        </button>
      </div>
    </div>
    <footer class="footer-box">
      <div style="display: inline-block">
        <input type="checkbox" name="keep" id="keep" checked value="">七天免登录
      </div>
      <a href="register.html">
        暂无账号,点击去登陆
      </a>
    </footer>
   </div>
    </form>
  </section>
  <script>
    function check(){
      if(document.getElementById("keep").checked){
        document.getElementById("keep").value =1;
      }
    }
  </script>
  
</body>
</html>

image.gif

其中内部样式表login.css如下:

.title{
  color:rgb(116, 116, 116);
  font-size: 32px;
  text-align: center;
}
.box{
  width: 300px;
  height: 150px;
  background-color: #00f7ff;
}
.py-3{
  width: 200px;
  height: 30px;
  background-color: pink;
}
.is-flex{
  width: 300px;
  height: 350px;
  border: 15px solid #02632c;
  background-color: rgb(255, 255, 255);
}
.inputs-wrap{
  margin: 0 auto;
}
.control .input{
  width: 200px;
  height: 26px;
  margin-bottom: 25px;
  border: 1px solid #02632c;
  border-radius: 5px;
}
.control button{
  width: 200px;
  border-radius: 5px;
  border: 1px solid #9fb9aa;
  font-size: 16px;
  color: #363636;
  background-color: #b1f3cd;
  margin-left: 2px;
}
.footer-box{
  width: 240px;
  height: 100px;
  margin-top: 110px;
  margin-left: 45px;
  color: #02632c;
  font-size: 12px;
}
.footer-box input{
  float: left;
}
.footer-box a{
  float: right;
  font-size: 12px;
  color: rgb(248, 91, 91);
  text-decoration: none;
}

image.gif

登录页面效果如下:

image.gif 编辑

3 创建checkLogin.php

接下来实现登录成功的检测,创建checkLogin.php用来检测:

<?php 
  if(isset($_POST['username']) && isset($_POST['password'])){
    $username = trim($_POST['username']);
    $password = md5(trim($_POST['password']));
    require "config.php";
    try {
      $pdo = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME,DB_USER,DB_PWD);
    } catch (PDOException $e) {
      echo $e->getMessage();
    }
    $sql = 'select * from users where username = :username and password = :password';
    $result = $pdo->prepare($sql);
    $result->bindParam(':username',$username);
    $result->bindParam(':password',$password);
    if($result->execute()){
        $rows=$result->fetch(PDO::FETCH_ASSOC);
        if($rows){
          if(isset($_POST['keep'])){
            //勾选七天免登录
            setcookie('username',$rows['username'],time()+604800);
          }else{
            setcookie('username',$rows['username']);
          }
          echo "<script>alert('恭喜您,登录成功!');
           window.location.href='index.php';</script>";
        }else{
          echo "<script>alert('用户名或密码错误,登录失败!');
           history.back();</script>";
           exit();
        }
    }else{
      echo "<script>window.location.href='login.php';</script>";
    }
  }
 
?>

image.gif

checkLogin.php的config.php配置文件也给贴下面(不要嫌弃我啰嗦哦):

<?php
  define('DB_HOST','localhost');
  define('DB_USER','***');//你的数据库服务器登录用户
  define('DB_PWD','*****');//替换成你的数据库服务器密码
  define('DB_NAME','db_test');//替换成你的数据库名
  define('DB_PORT','3306');
  define('DB_TYPE','mysql');
  define('DB_CHARSET','utf8');
  define('DB_DSN',"mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET);
?>

image.gif

此时你可以进行登录检测了。故意输入错误,会提示如下内容:

image.gif 编辑

4 登录成功的界面index.php:

<?php
date_default_timezone_set('PRC');
//如果cookie不存在,那就是第一次访问网站
if(!isset($_COOKIE["username"])){
    echo "<script>alert('请先登录');
           window.location.href='login.php';</script>";
}  
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>欢迎界面</title>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="container">
    <div class="jumbotron" style="background-color:#17ecf1">
       <h1>欢迎
          <span style="color:white;font-weight:700">
            <?php echo $_COOKIE['username']; ?>
          </span>
          登录网站
       </h1>
       <p><a  class="btn btn-warning btn-lg" href="logout.php" role="button">退出登录</a></p>
    </div>
</body>
</html>

image.gif

我们测试一下,登录成功后的效果,此时你拷贝这个连接到新开一个浏览器页面,会出现不需要登录就能成功进入主页。

image.gif 编辑

顺手把退出登录的功能也给实现了logout.php:

<?php 
 setcookie("username","",time()-1);
 echo "<script>window.location.href='login.php';</script>";
?>

image.gif

此文到此接触!

下一篇 Session

相关文章
|
Java 开发工具 Spring
Spring Boot 接入支付宝,实战来了!
支付宝推出了新的转账接口alipay.fund.trans.uni.transfer(升级后安全性更高,功能更加强大) ,老转账接口alipay.fund.trans.toaccount.transfer将不再维护,新老接口的一个区别就是新接口采用的证书验签方式。
Spring Boot 接入支付宝,实战来了!
|
机器学习/深度学习 自然语言处理 计算机视觉
YOLOv11改进策略【Backbone/主干网络】| CVPR 2024 替换骨干网络为 RMT,增强空间信息的感知能力
YOLOv11改进策略【Backbone/主干网络】| CVPR 2024 替换骨干网络为 RMT,增强空间信息的感知能力
358 0
YOLOv11改进策略【Backbone/主干网络】| CVPR 2024 替换骨干网络为 RMT,增强空间信息的感知能力
|
SQL 存储 关系型数据库
Hologres SQL 查询优化技巧
【9月更文第1天】随着大数据处理的需求日益增长,如何高效地进行数据查询和分析变得尤为重要。Hologres 是阿里云推出的一款实时数仓产品,它基于 PostgreSQL 构建,并针对在线分析处理(OLAP)场景进行了优化,支持实时数据写入与查询,能够实现毫秒级的查询响应。本文将探讨在使用 Hologres 时如何编写高效的 SQL 查询,并介绍一些特定于 Hologres 的优化技巧。
892 2
|
存储 关系型数据库 PostgreSQL
PostgreSQL TID及tuple slot
PostgreSQL TID及tuple slot
490 0
PostgreSQL TID及tuple slot
|
Java 应用服务中间件
解决tomcat闪退问题,亲测有效~
解决tomcat闪退问题,亲测有效~
2152 0
解决tomcat闪退问题,亲测有效~
|
JSON 安全 Java
Spring Security 6.x 微信公众平台OAuth2授权实战
上一篇介绍了OAuth2协议的基本原理,以及Spring Security框架中自带的OAuth2客户端GitHub的实现细节,本篇以微信公众号网页授权登录为目的,介绍如何在原框架基础上定制开发OAuth2客户端。
974 4
Spring Security 6.x 微信公众平台OAuth2授权实战
|
安全 Java 数据安全/隐私保护
构建高效网站后台:权限管理系统设计与实现
【7月更文挑战第5天】在现代Web应用开发中,权限管理是后台系统不可或缺的一部分,它确保了系统的安全性与用户数据的隐私。良好的权限管理系统能够精细控制不同用户角色对功能模块及数据资源的访问权限,从而提升系统的灵活性和安全性。本文将深入探讨权限管理的基本概念、设计思路,并通过一个简单的代码示例展示如何在Web后台中实现基本的权限控制逻辑。
926 2
|
缓存 JavaScript 前端开发
【前端架构必备】手摸手带你搭建一个属于自己的脚手架
【前端架构必备】手摸手带你搭建一个属于自己的脚手架
2370 0
【前端架构必备】手摸手带你搭建一个属于自己的脚手架
|
API UED SEO
俄语逆向海淘代购集运系统搭建技术方案
逆向海淘在俄罗斯兴起,为满足当地消费者对中国商品的需求,需构建面向俄罗斯的淘宝代购集运系统。关键步骤包括:市场调研以了解消费者偏好和竞争态势;通过API集成淘宝数据,自建技术平台支持俄语界面和支付;合作物流公司确保配送;建立俄语客服,优化用户体验;遵守法规,控制质量,管理汇率风险;并持续收集反馈,扩展服务和合作伙伴。通过全面策略,可在逆向海淘市场立足。[[c0b.cc/R4rbK2](c0b.cc/R4rbK2)]