You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现注册成功后自动登录并跳转home.php的代码咨询

注册后自动登录实现代码

你只需要修改register.php中账号插入成功后的无需激活分支代码即可,核心逻辑是在账号创建完成后直接写入登录态SESSION,再重定向到home.php。

具体修改步骤

  1. 找到register.php中无需账号激活的else分支(对应account_activation为false的场景)
  2. 替换原有的成功提示代码,新增SESSION赋值和重定向逻辑,也可根据需求同步新增记住我功能的cookie赋值代码

可直接复用的修改后代码

register.php完整代码

<?php
include 'main.php';
// 现在我们检查是否有数据提交,isset()函数将校验数据是否存在。
if (!isset($_POST['username'], $_POST['password'], $_POST['cpassword'], $_POST['email'])) {
    // 未获取到应提交的必填数据。
    exit('<div class="error form">请完成注册表单填写!</div>');
}
// 校验提交的注册数据不为空。
if (empty($_POST['username']) || empty($_POST['password']) || empty($_POST['email'])) {
    // 存在一个或多个空值字段。
    exit('<div class="error form">请完成注册表单填写!</div>');
}
// 检查邮箱格式是否合法。
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    exit('<div class="error form">邮箱格式不合法!</div>');
}
// 用户名仅允许包含字母和数字。
if (!preg_match('/^[a-zA-Z0-9]+$/', $_POST['username'])) {
    exit('<div class="error form">用户名格式不合法!</div>');
}
// 密码长度需在5-20个字符之间。
if (strlen($_POST['password']) > 20 || strlen($_POST['password']) < 5) {
    exit('<div class="error form">密码长度需在5到20个字符之间!</div>');
}
// 校验两次输入的密码是否一致。
if ($_POST['cpassword'] != $_POST['password']) {
    exit('<div class="error form">两次输入的密码不匹配!</div>');
}
// 检查是否已存在相同用户名或邮箱的账号
$stmt = $pdo->prepare('SELECT id, password FROM accounts WHERE username = ? OR email = ?');
$stmt->execute([ $_POST['username'], $_POST['email'] ]);
$account = $stmt->fetch(PDO::FETCH_ASSOC);
// 存储查询结果用于判断账号是否已存在
if ($account) {
    // 用户名已存在
    echo '<div class="error form">用户名和/或邮箱已被注册!</div>';
} else {
    // 用户名不存在,插入新账号数据
    $stmt = $pdo->prepare('INSERT INTO accounts (username, password, email, activation_code) VALUES (?, ?, ?, ?)');
    // 禁止在数据库中明文存储密码,因此对密码做哈希处理,用户登录时使用password_verify校验
    $password = password_hash($_POST['password'], PASSWORD_DEFAULT);
    $uniqid = account_activation ? uniqid() : 'activated';
    $stmt->execute([ $_POST['username'], $password, $_POST['email'], $uniqid ]);
    if (account_activation) {
        // 需要账号激活,调用main.php中的send_activation_email函数向用户发送激活邮件
        send_activation_email($_POST['email'], $uniqid);
        echo '请查收你的邮箱完成账号激活!';
    } else {
        // 注册成功直接写入登录态
        session_regenerate_id();
        $_SESSION['loggedin'] = TRUE;
        $_SESSION['name'] = $_POST['username'];
        $_SESSION['id'] = $pdo->lastInsertId(); // 获取刚插入的新账号ID
        // 如需开启记住我功能可取消下方注释,$rememberme_token需同步存入accounts表的rememberme字段
        // $rememberme_token = bin2hex(random_bytes(16));
        // setcookie('rememberme', $rememberme_token, time() + (86400 * 30), "/");
        // 重定向到home.php
        header('Location: home.php');
        exit;
    }
}
?>

注意事项

  • 如果你的业务开启了账号激活,需要在激活接口的激活成功逻辑中加入上述SESSION赋值和重定向代码,才可以实现激活后自动登录
  • home.php顶部需引入main.php并调用check_loggedin($pdo)函数即可正常识别用户登录状态

内容的提问来源于stack exchange,提问作者Jim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:45:00