当前位置:首页 > PHP

php 实现扫码登录

2026-02-13 16:15:15PHP

PHP 实现扫码登录的步骤

扫码登录通常涉及生成二维码、轮询验证和状态更新。以下是实现扫码登录的核心步骤:

生成二维码 使用 PHP 生成包含唯一 token 的二维码。可以使用 endroid/qr-code 库生成二维码:

require 'vendor/autoload.php';
use Endroid\QrCode\QrCode;

$token = bin2hex(random_bytes(16));
$qrCode = new QrCode('https://yourdomain.com/auth?token=' . $token);
header('Content-Type: ' . $qrCode->getContentType());
echo $qrCode->writeString();

存储 token 状态 将生成的 token 存入数据库或缓存(如 Redis),并标记为未扫描状态:

$redis = new Redis();
$redis->connect('127.0.0.1');
$redis->setex('scan_token:' . $token, 300, 'pending'); // 5分钟过期

移动端扫码处理 用户扫码后,移动端应请求后端验证 token 有效性并更新状态:

if ($redis->exists('scan_token:' . $_POST['token'])) {
    $redis->set('scan_token:' . $_POST['token'], 'scanned');
    echo json_encode(['status' => 'success']);
}

网页端轮询检查 网页端通过 AJAX 轮询检查 token 状态变化:

$status = $redis->get('scan_token:' . $_GET['token']);
if ($status === 'scanned') {
    $redis->set('scan_token:' . $_GET['token'], 'confirmed');
    echo json_encode(['status' => 'confirmed']);
}

完成登录 确认状态后创建会话并返回用户信息:

php 实现扫码登录

if ($redis->get('scan_token:' . $_GET['token']) === 'confirmed') {
    $user = getUserByToken($_GET['token']); // 自定义用户查询逻辑
    $_SESSION['user'] = $user;
    $redis->del('scan_token:' . $_GET['token']);
    echo json_encode(['user' => $user]);
}

安全注意事项

  • 使用 HTTPS 确保通信安全
  • 限制 token 有效期(如 5 分钟)
  • 每个 token 只能使用一次
  • 验证扫码请求的来源 IP 或设备信息

扩展功能

  • 添加扫码后的用户确认步骤
  • 集成 WebSocket 替代轮询
  • 记录扫码日志用于审计

实现扫码登录需要前后端协作,核心是 token 的状态管理和安全验证机制。

标签: php
分享给朋友:

相关文章

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php实现即时通讯

php实现即时通讯

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

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…

php 实现路由

php 实现路由

PHP 实现路由的方法 在 PHP 中实现路由功能可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 PHP 实现简单路由 通过解析 URL 并匹配对应的处理逻辑,可以实现基本的路由功能。以…