当前位置:首页 > PHP

php实现账号切换源码

2026-02-28 03:05:15PHP

php实现账号切换源码

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保护会话数据
  • 设置会话过期时间

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

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

相关文章

vue源码实现分析

vue源码实现分析

Vue 源码核心实现分析 Vue 的源码实现主要围绕响应式系统、虚拟 DOM、模板编译和组件化等核心概念展开。以下是对关键部分的详细分析: 响应式系统实现 Vue 使用 Object.defineP…

vue实现聊天源码

vue实现聊天源码

Vue实现聊天功能的核心步骤 环境准备 安装Vue CLI创建项目,添加必要依赖如vue-socket.io或socket.io-client实现实时通信。基础项目结构需包含聊天组件、消息列表和输入框…

react打包如何不删除源码

react打包如何不删除源码

配置自定义构建输出目录 在项目根目录下创建或修改 craco.config.js(使用CRACO)或 config-overrides.js(使用react-app-rewired),通过覆盖Webp…

react源码实现

react源码实现

React 源码实现分析 React 的核心源码实现涉及虚拟 DOM、协调算法、组件生命周期等多个关键部分。以下是主要实现机制的解析: 虚拟 DOM 结构 React 使用虚拟 DOM 作为真实 D…

css源码制作

css源码制作

CSS 源码制作基础 CSS(层叠样式表)用于控制网页的视觉表现,以下为制作 CSS 源码的核心方法: 文件创建与链接 新建 .css 文件(如 style.css),通过 <link>…

jquery源码解读

jquery源码解读

jQuery 源码解读指南 jQuery 源码解读需要从核心架构、模块划分、设计模式等角度入手。以下是关键解读方向和方法: 核心架构 jQuery 的核心是一个立即执行的函数表达式(IIFE),创建…