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

POST表单数据传递与GET重定向问题求助(附PHP代码)

问题修复方案

1. 密码哈希计算错误修复

原代码中盐值处理逻辑错误,导致生成的哈希值与存储的stored_hash无法匹配:

  • 错误逻辑:先单独对盐值做MD5哈希,再拼接用户密码计算最终哈希
  • 正确逻辑:直接将原始盐值与用户输入的密码拼接后计算哈希,这才是与存储哈希对应的生成方式

2. 重定向失效的核心原因

报错"expected a POST to redirect to a GET but received POST",通常是因为在发送header()重定向指令之前有输出内容(比如文件开头的空格、换行、前置HTML标签等),导致HTTP头无法正常发送,重定向失败后请求仍保持POST方法。

修正后的完整代码

<?php
$salt = 'XyZzy12*_';
$stored_hash = '1a52e17fa899cf40fb04cfc42e6352f1';
//$stored_hash = 'a8609e8d62c043243c4e201cbb342862';  // 对应密码 meow123
$failure = false;  // 初始状态:无POST提交数据

// 处理POST请求
if (isset($_POST['who']) && isset($_POST['pass'])) {
    if (strlen($_POST['who']) < 1 || strlen($_POST['pass']) < 1) {
        $failure = "用户名和密码不能为空";
    } else {
        // 正确计算哈希:原始盐值 + 用户输入密码
        $check = hash('md5', $salt . $_POST['pass']);
        if ($check == $stored_hash) {
            // 确保执行重定向前无任何输出
            header("Location: game.php?name=" . urlencode($_POST['who']));
            exit; // 终止脚本执行,避免后续代码干扰重定向
        } else {
            $failure = "密码错误";
        }
    }
}
?>

额外注意事项

  • 确保PHP文件的最开头没有任何空格、换行或HTML代码,<?php标签必须是文件的第一个字符,否则header()指令会失效。
  • 若需验证第一个stored_hash对应的密码,可通过反向生成验证:执行echo hash('md5', 'XyZzy12*_' . '目标密码');,将结果与stored_hash对比。
  • 用exit替代原代码的return,更明确地终止当前脚本,避免后续潜在的输出干扰重定向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:48:10