PHP登录系统输入正确凭证仍自定向问题求助
登录成功后仍跳转回登录页的问题修复方案
核心问题及修复
Session未初始化
login.php中操作$_SESSION前未调用session_start(),导致会话变量无法存储。需在文件最顶部添加:<?php session_start(); // 新增这行 require 'database.php'; if(!empty($_SESSION['id'])){ header("Location: index.php"); exit(); } ?>Session校验键不匹配
login_index.php中校验的是$_SESSION['user'],但login.php中仅设置了$_SESSION['id']和$_SESSION['login'],导致校验失败跳转回登录页。修改login_index.php的校验逻辑:<?php session_start(); // 改为校验已设置的session键 if (!isset($_SESSION['id']) || !$_SESSION['login']) { header("Location: login.php"); exit(); } ?>跳转后未终止代码执行
login.php中登录成功后的header("Location: login_index.php")后未加exit(),可能导致后续代码干扰会话状态,需补充:if($password == $row['password']){ $_SESSION["login"] = true; $_SESSION["id"] = $row["id"]; header("Location: login_index.php"); exit(); // 新增这行 }
重要安全与逻辑优化
SQL注入防护:直接拼接用户输入到SQL语句存在注入风险,改用mysqli预处理语句:
$stmt = $conn->prepare("SELECT * FROM cargo WHERE email = ?"); $stmt->bind_param("s", $email); $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc();密码明文存储风险:数据库中存储明文密码极不安全,注册时需用
password_hash()加密,登录时用password_verify()校验:// 注册时存储密码 $hashedPassword = password_hash($password, PASSWORD_DEFAULT); // 登录时校验 if(password_verify($password, $row['password'])){ // 登录成功逻辑 }表单验证逻辑调整:先检查字段是否为空,再查询数据库,避免无效查询:
if(isset($_POST["login"])){ $email = trim($_POST["email"]); $password = trim($_POST["password"]); if(empty($email) || empty($password)){ echo"<div class='alert alert-danger'>所有字段不能为空</div>"; } else { // 数据库查询逻辑 } }错误提示样式修正:错误提示使用
alert-danger而非alert-success,符合语义:echo"<div class='alert alert-danger'>密码错误</div>";
内容的提问来源于stack exchange,提问作者Ricardo Domingo
相关产品推荐
相关产品推荐

