PHP后台登录功能单账号登录限制

PHP后台登录功能单账号登录限制

  • 单账号登陆是什么
    • 第一步创建数据表
    • 第二步创建登录页面test2.html
    • 第三步创建登录提交test2.php
    • 第四步访问后台首页
    • 第五步演示

单账号登陆是什么

一个用户只能登录一个账号通常被称为单账号登录限制或单用户单账号限制。这意味着每个用户只能使用一个账号进行登录,并且不允许同一用户同时使用多个账号登录系统

在这里插入图片描述

第一步创建数据表

CREATE TABLE `users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`username` varchar(30) DEFAULT NULL COMMENT '账号',`password` varchar(30) DEFAULT NULL COMMENT '密码',`last_login` varchar(30) DEFAULT NULL COMMENT '最后登录时间',PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;INSERT INTO `users` VALUES ('1', 'admin', 'admin', '2023-07-20 11:39:12');

第二步创建登录页面test2.html

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>登录页面</title><style>body {font-family: Arial, sans-serif;text-align: center;}h2 {margin-top: 50px;}.container {margin-top: 50px;width: 300px;margin-left: auto;margin-right: auto;}input[type="text"], input[type="password"] {width: 100%;padding: 12px 20px;margin: 8px 0;display: inline-block;border: 1px solid #ccc;box-sizing: border-box;}button {background-color: #4CAF50;color: white;padding: 14px 20px;margin: 8px 0;border: none;cursor: pointer;width: 100%;}button:hover {opacity: 0.8;}</style><script src="https://code.jquery.com/jquery-3.1.1.min.js"></script><script>$(document).ready(function() {$("form").submit(function(event) {event.preventDefault(); // 阻止表单的默认提交行为var username = $("input[name='username']").val();var password = $("input[name='password']").val();// 发送AJAX请求$.ajax({url: "test2.php", // 替换为实际的登录处理文件路径type: "POST",data: {username: username,password: password},success: function(response) {// 处理服务器返回的响应数据if (response === "success") {alert("登录成功");window.location.href = "http://localhost/index.php";// 在此处可以进行页面跳转或其他操作} else {alert("登录失败,请检查用户名和密码");}}});});});</script>
</head>
<body>
<div class="container"><h2>登录</h2><form><input type="text" placeholder="用户名" name="username" required><br><input type="password" placeholder="密码" name="password" required><br><button type="submit">登录</button></form>
</div>
</body>
</html>

第三步创建登录提交test2.php

关键点:登录时更新登录时间

<?php
// 连接数据库
$servername = "localhost"; // 数据库主机名
$username = "root"; // 数据库用户名
$password = "root"; // 数据库密码
$dbname = "aaa"; // 数据库名
// 创建数据库连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接是否成功
if ($conn->connect_error) {die("连接数据库失败: " . $conn->connect_error);
}
session_start();
// 获取POST请求中的用户名和密码
$username = $_POST['username'];
$password = $_POST['password'];
// 查询用户表验证用户名和密码
$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = $conn->query($sql);if ($result->num_rows > 0) {// 验证通过,更新用户登录时间$currentTime = date('Y-m-d H:i:s'); // 获取当前时间$updateSql = "UPDATE users SET last_login='$currentTime' WHERE username='$username'";if ($conn->query($updateSql) === TRUE) {// 更新成功$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";$result = $conn->query($sql);$user=mysqli_fetch_assoc($result);$_SESSION['userInfo']=$user;echo 'success';} else {// 更新失败echo 'fail';}
} else {// 验证失败,返回失败响应echo 'fail';
}
// 关闭数据库连接
$conn->close();

第四步访问后台首页

校验时间退出登录

<?php
// 连接数据库
$servername = "localhost"; // 数据库主机名
$username = "root"; // 数据库用户名
$password = "root"; // 数据库密码
$dbname = "aaa"; // 数据库名
// 创建数据库连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接是否成功
if ($conn->connect_error) {die("连接数据库失败: " . $conn->connect_error);
}
session_start();
if($_SESSION&&isset($_SESSION['userInfo']['username'])){// 获取POST请求中的用户名和密码$username = $_SESSION['userInfo']['username'];$password =$_SESSION['userInfo']['password'];
// 查询用户表验证用户名和密码$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";$result = $conn->query($sql);$user=mysqli_fetch_assoc($result);if($_SESSION['userInfo']['last_login']!=$user['last_login']){echo("已经其它地方登录");exit;}else{echo("登录成功");exit;}
}
echo("登录已超时");exit;

第五步演示

准备两个浏览器 第一浏览运行下面,然后第二个也登录如下

在这里插入图片描述

再次访问第一个浏览器,成功返回
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/5851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 学习记录53(ARM篇)

Linux 学习记录53(ARM篇) 本文目录 Linux 学习记录53(ARM篇)一、内存读写指令1. 在C语言中读取内存2. 指令码及功能3. 格式4. 使用示例5. 寻址方式(1. 前索引方式(2. 后索引方式(3. 自动索引 6.批量寄存器操作指令(1. 操作码(2. 格式(3. 使用示例(4. 地址增长方式>1 ia后缀&…

========Java基础——小结1========

一、Java 两大版本 Java 主要分为两个版本: Java SE 和Java EE。 Java SE 全称Java Platform Standard Edition&#xff0c;是 Java 的标准版&#xff0c;主要用于桌面应用程序开发&#xff0c;它包含了 Java 语言基础、JDBC (Java 数据库连接)、I/O (输入/输出)、TCP/IP 网络…

2.8 Android ebpf帮助函数解读(七)

121.long bpf_read_branch_records(struct bpf_perf_event_data *ctx, void *buf, u32 size, u64 flags) 描述:对于附加到 perf 事件的 eBPF 程序,检索与 ctx 关联的分支记录(struct perf_branch_entry),并将其存储在 buf 指向的缓冲区中,最大大小为size字节。 返回值:…

股票基金入门知识

1.开盘价和收盘价如何产生 时间9:30-11:30 13:00-15:00 集合竞价时间段&#xff1a;9:15-9:25 以此产生开盘价 最后集中竞价时间段&#xff1a;深市14:57-15:00 &#xff0c;以此产生收盘价。 沪市则采用最后一分钟加权得出收盘价影响股价的因素 市场投资情绪&#xff0c;宏观…

Hadoop——DataGrip连接MySQL|Hive

1、下载 DataGrip下载&#xff1a;DataGrip: The Cross-Platform IDE for Databases & SQL by JetBrains 2、破解 破解链接&#xff1a;https://www.cnblogs.com/xiaohuhu/p/17218430.html 3、启动环境 启动Hadoop&#xff1a;到Hadoop的sbin目录下右键管理员身份运行…

Spring Boot 全局异常处理

Spring Boot 全局异常处理 ErrorCode.java (此枚举类中包含了异常的唯一标识、HTTP 状态码以及错误信息) 这个类的主要作用就是统一管理系统中可能出现的异常&#xff0c;比较清晰明了。但是&#xff0c;可能出现的问题是当系统过于复杂&#xff0c;出现的异常过多之后&#…

【C++】list 模拟笔记

文章目录 list定义结点类&#xff08;list_node&#xff09;为什么封装迭代器为类 &#xff1f;库里面模板多参数的由来 &#xff1f;为什么普通迭代器不能隐式类型转换成const迭代器&#xff1f;迭代器位置指向及其返回值和整体代码 list list 和前面学习的 string 和 vector …

微信小程序使用ECharts的示例详解

目录 安装 ECharts 组件使用 ECharts 组件图表延迟加载 echarts-for-weixin 是 ECharts 官方维护的一个开源项目&#xff0c;提供了一个微信小程序组件&#xff08;Component&#xff09;&#xff0c;我们可以通过这个组件在微信小程序中使用 ECharts 绘制图表。 echarts-fo…

excel中单行换成多行

今天碰以下情况&#xff1a; 这在excel表中是在一个单元格&#xff0c;现在需要对其进行转换&#xff0c;将一个单元格换成多行 步骤&#xff1a; 1.删除换行符&#xff0c;添加一个逗号 2.选择数据-分列-分隔字符-逗号-确定 3.复制上述数据&#xff0c;选择性粘贴-转置 完…

MemberApplication

目录 1 MemberApplication 1.1 /// 发送验证码 1.1.1 //验证码超时时间 1.2 /// 验证码验证 MemberApplication /// 发送验证码

2816. 判断子序列

题目链接&#xff1a; 自己的做法&#xff1a; #include <bits/stdc.h>using namespace std;const int N 1e5 10; int a[N], b[N]; int main() {int n, m;bool flag true;scanf("%d%d", &n, &m);for (int i 0; i < n; i) scanf("%d"…

笙默考试管理系统-MyExamTest(10)

笙默考试管理系统-MyExamTest&#xff08;10&#xff09; 目录 一、 笙默考试管理系统-MyExamTest 二、 笙默考试管理系统-MyExamTest 三、 笙默考试管理系统-MyExamTest 四、 笙默考试管理系统-MyExamTest 五、 笙默考试管理系统-MyExamTest 笙默考试管理系统-MyExa…

哈希:探索快速的数据存储和搜索方法

哈希&#xff1a;探索快速的数据存储和搜索方法 哈希表作为一种高效的数据存储结构&#xff0c;可以使数据的存储位置与关键码之间建立一一映射的关系&#xff0c;从而加快元素的搜索速度。然而&#xff0c;哈希方法也面临着哈希冲突的问题&#xff0c;即不同的关键字通过相同…

dxf怎么转换成PDF格式?转换方法其实很简单

PDF文件是一种可靠的文件格式&#xff0c;可以在各种操作系统和软件上打开和查看。而dxf是CAD文件的一种格式&#xff0c;打开它一般都是需要相关的操作软件才能打开&#xff0c;不是特别方便&#xff0c;将dxf文件转换成PDF格式就可以很好的解决这一问题&#xff0c;下面教大家…

解锁新技能《基于logback的纯java版本SDK实现》

开源SDK&#xff1a; <!--Java通用日志组件SDK--> <dependency><groupId>io.github.mingyang66</groupId><artifactId>oceansky-logger</artifactId><version>4.3.6</version> </dependency> <!-- Java基于logback的…

Kafka - Primie Number of Partitions Issue Consumer Group Rebalance

文章目录 生产者&#xff1a;将数据写入 Kafka 的客户端。 消费者&#xff1a;从 Kafka 中读取数据的客户端。 Topic&#xff1a;Kafka 中用于组织和存储数据的逻辑概念&#xff0c;类似于数据库表。 Record&#xff1a;发送到 Topic 的消息称为 Record。 Partition&#x…

electron 安装失败,Electron failed to install correctly

我的电脑是mac&#xff0c;这个问题上网找了很多解决办法试了一下都不行&#xff0c;删除重装也不太行&#xff0c;但是单独安装是可以的 install electron执行完后再启动就可以啦 npm start下面的不太行 1.切到node_modules/electron执行如下指令 node install.js还有 nod…

图像清晰度判断

FFT&#xff08;Fast Fourier Transform&#xff09;是一种常用的频域分析工具&#xff0c;可以将图像从空间域转换到频域。在频域中&#xff0c;高频对应了图像的细节部分&#xff0c;低频对应了图像的大致形状。因此&#xff0c;我们可以通过计算图像在高频部分的能量来评估图…

List有值二次转换给其他对象报null

List<PlatformUsersData> listData platformUsersMapper.selectPlatformUserDataById(data); users.setPlatformUsersData(listData);为什么listData 有值&#xff0c;users.getPlatformUsersData&#xff08;&#xff09;仍然为空在这段代码中&#xff0c;我们假设listD…

NLP(六十)Baichuan-13B-Chat模型使用体验

2023年7月11日&#xff0c;百川智能正式发布参数量130亿的通用大语言模型Baichuan-13B-Base、对话模型Baichuan-13B-Chat及其INT4/INT8两个量化版本。   本文将介绍大模型BaiChuan-13B-Chat的使用体验&#xff0c;其HuggingFace网址为&#xff1a;https://huggingface.co/bai…