当前位置:首页 > PHP

php实现账号切换源码

2026-02-28 03:05:15PHP

php实现账号切换源码

PHP 实现账号切换功能

实现账号切换功能通常需要以下几个关键部分:用户认证、会话管理、权限验证以及界面交互。以下是一个简单的实现示例:

数据库表结构(MySQL示例)

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(255) NOT NULL,
    role ENUM('admin', 'user') DEFAULT 'user'
);

用户登录认证

// login.php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    // 数据库查询
    $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
    $stmt->execute([$username]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['username'] = $user['username'];
        $_SESSION['role'] = $user['role'];
        header('Location: dashboard.php');
        exit;
    } else {
        $error = "Invalid credentials";
    }
}

账号切换功能

// switch_account.php
session_start();
if (!isset($_SESSION['user_id'])) {
    header('Location: login.php');
    exit;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['target_user'])) {
    $targetUser = $_POST['target_user'];

    $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
    $stmt->execute([$targetUser]);
    $user = $stmt->fetch();

    if ($user) {
        // 保存当前用户信息到临时会话
        $_SESSION['original_user'] = [
            'id' => $_SESSION['user_id'],
            'username' => $_SESSION['username'],
            'role' => $_SESSION['role']
        ];

        // 切换到目标账号
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['username'] = $user['username'];
        $_SESSION['role'] = $user['role'];

        header('Location: dashboard.php');
        exit;
    }
}

切换回原始账号

// revert_account.php
session_start();
if (isset($_SESSION['original_user'])) {
    $_SESSION['user_id'] = $_SESSION['original_user']['id'];
    $_SESSION['username'] = $_SESSION['original_user']['username'];
    $_SESSION['role'] = $_SESSION['original_user']['role'];
    unset($_SESSION['original_user']);
}
header('Location: dashboard.php');

前端界面示例

<!-- switch_form.html -->
<form action="switch_account.php" method="post">
    <select name="target_user">
        <?php
        $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
        $stmt = $pdo->query("SELECT username FROM users WHERE username != ?");
        $stmt->execute([$_SESSION['username']]);
        while ($row = $stmt->fetch()) {
            echo '<option value="'.$row['username'].'">'.$row['username'].'</option>';
        }
        ?>
    </select>
    <button type="submit">切换账号</button>
</form>

<?php if (isset($_SESSION['original_user'])): ?>
<a href="revert_account.php">切换回原账号</a>
<?php endif; ?>

安全注意事项

  • 确保只有管理员或有权限的用户才能执行账号切换
  • 使用预处理语句防止SQL注入
  • 对敏感操作记录日志
  • 使用HTTPS保护会话数据
  • 设置会话过期时间

这个实现提供了基本的账号切换功能,可以根据实际需求进行扩展,比如添加切换记录、限制切换时间等。

php实现账号切换源码

标签: 账号源码
分享给朋友:

相关文章

vue axios实现登录源码

vue axios实现登录源码

以下是一个基于Vue.js和Axios实现登录功能的完整示例代码,包含前端和后端交互逻辑: 前端部分(Vue组件) 安装Axios依赖: npm install axios 登录组件(Logi…

如何查看react源码

如何查看react源码

查看React源码的方法 克隆React仓库 访问React的GitHub仓库(https://github.com/facebook/react),使用以下命令克隆到本地: git clon…

react源码实现视频

react源码实现视频

以下是关于React源码实现的视频资源推荐,涵盖核心概念、虚拟DOM、Fiber架构等关键内容的讲解: React源码解析视频资源 React Fiber架构深度解析 B站UP主「技术蛋」的系列视频…

js sort源码实现

js sort源码实现

JavaScript 的 Array.prototype.sort 方法在 V8 引擎中的实现会根据数组类型和长度选择不同的排序算法,主要分为以下情况: 小数组(长度 ≤ 10) 使用插入排序(Ins…

如何查看java源码

如何查看java源码

查看Java源码的方法 通过IDE直接查看 大多数集成开发环境(IDE)如IntelliJ IDEA或Eclipse支持直接查看Java源码。在代码中按住Ctrl键(Windows/Linux)或Co…

如何看java源码

如何看java源码

阅读Java源码的方法 下载JDK源码 从Oracle官网或OpenJDK仓库获取JDK源码包。Oracle JDK安装后,源码通常位于src.zip;OpenJDK可直接通过Git克隆仓库: gi…