当前位置:首页 > PHP

php 实现扫码登录

2026-02-27 15:00:18PHP

实现扫码登录的基本流程

扫码登录的核心流程分为生成二维码、手机端扫码确认、服务端验证三个部分。用户访问网页时生成唯一二维码,手机扫码后发送确认信息,服务端验证通过后完成登录。

生成唯一二维码

使用PHP生成包含临时token的二维码图片,token需设置较短的有效期(如2分钟)。推荐使用endroid/qr-code库生成二维码:

php 实现扫码登录

composer require endroid/qr-code
use Endroid\QrCode\QrCode;
$token = bin2hex(random_bytes(16)); // 生成随机token
$_SESSION['scan_token'] = $token;   // 存储到session

$qrCode = new QrCode('https://yoursite.com/scan?token='.$token);
header('Content-Type: '.$qrCode->getContentType());
echo $qrCode->writeString();

轮询检查登录状态

前端通过定时请求检查扫码状态:

function checkScan() {
    fetch('/api/check_scan?token=<?=$token?>')
        .then(res => res.json())
        .then(data => {
            if(data.status === 'confirmed') {
                location.reload(); // 登录成功
            }
        });
}
setInterval(checkScan, 2000); // 每2秒检查一次

手机端处理逻辑

手机APP或微信小程序扫码后,调用确认接口:

php 实现扫码登录

// 手机端确认接口
if ($_POST['token'] === $_SESSION['scan_token']) {
    $_SESSION['user'] = $_POST['userid']; // 绑定用户信息
    file_put_contents("scan_{$token}.log", 'confirmed');
}

服务端验证处理

PHP检查token状态:

$status = 'waiting';
if (file_exists("scan_{$token}.log")) {
    $status = file_get_contents("scan_{$token}.log");
}
echo json_encode(['status' => $status]);

安全注意事项

  1. 每个token只能使用一次,验证后立即失效
  2. 采用HTTPS协议传输防止中间人攻击
  3. 限制同一IP的频繁请求
  4. 二维码内容建议使用一次性URL而非直接包含token

完整实现建议

对于生产环境,建议:

  • 使用Redis存储临时token状态
  • 采用JWT替代session管理
  • 添加扫码日志记录
  • 实现二维码自动刷新机制

微信生态开发可直接使用官方提供的扫码登录接口,避免重复造轮子。

标签: php
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开: $fi…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…