PHP实现注册成功后自动登录并跳转home.php的代码咨询
注册后自动登录实现代码
你只需要修改register.php中账号插入成功后的无需激活分支代码即可,核心逻辑是在账号创建完成后直接写入登录态SESSION,再重定向到home.php。
具体修改步骤
- 找到
register.php中无需账号激活的else分支(对应account_activation为false的场景) - 替换原有的成功提示代码,新增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
相关产品推荐
相关产品推荐

