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

PHP URL参数重定向问题:登录后story参数丢失页面空白

问题:登录后重定向丢失story参数

我正在制作一个含多链接的首页,用户未登录时点击链接会跳转至登录页,登录后需继续访问原目标页面。作为PHP新手,可能遗漏了细节。

现有代码情况

首页链接格式

<p><a href="link.php?story=1">Link 1</a></p>
<p><a href="link.php?story=2">Link 2</a></p>

登录文件重定向代码

$story_id = $_GET['story'];
header("Location: link.php?story=".$story_id);
exit();

遇到的问题

加载页面时,story_id参数未出现在URL中,页面空白,比如example.com/link.php?story=。但如果直接将$story_id设为具体数值(如5),URL会显示该数值且功能正常,可跳转至example.com/link.php?story=5。补充:已在header后添加exit();,但URL仍无参数。

问题原因

核心问题是登录页没有接收到原链接的story参数。用户点击首页链接后,会被拦截到登录页,但原链接的参数并未传递到登录页,导致登录后重定向时$_GET['story']为空值。

解决步骤

1. 修改首页链接,传递原目标地址到登录页

把首页的链接改为直接跳转到登录页,同时携带原目标页面的完整地址(包括story参数)。为避免参数解析错误,建议用urlencode()处理目标地址:

静态HTML链接(手动编码参数):

<p><a href="login.php?redirect=link.php%3Fstory%3D1">Link 1</a></p>
<p><a href="login.php?redirect=link.php%3Fstory%3D2">Link 2</a></p>

PHP动态生成链接(更便捷):

<?php
$story_list = [1, 2];
foreach ($story_list as $id) {
    $target_url = urlencode("link.php?story=$id");
    echo "<p><a href='login.php?redirect=$target_url'>Link $id</a></p>";
}
?>

2. 修改登录页的重定向逻辑

登录验证通过后,获取传递过来的redirect参数,解码后重定向到目标页面。同时增加安全校验,防止恶意跳转:

// 替换为实际的登录验证逻辑(比如校验账号密码)
$login_success = true;

if ($login_success) {
    // 获取重定向地址,默认跳转到首页
    $redirect_url = isset($_GET['redirect']) ? urldecode($_GET['redirect']) : 'index.php';
    
    // 安全校验:只允许本站内地址跳转,防止钓鱼攻击
    if (strpos($redirect_url, 'http') !== 0 && strpos($redirect_url, '//') !== 0) {
        header("Location: $redirect_url");
        exit();
    } else {
        // 非法地址,跳转到首页
        header("Location: index.php");
        exit();
    }
}

3. 原代码失效原因

原登录页直接尝试获取$_GET['story'],但用户访问登录页时,URL里并没有这个参数(用户是从首页跳转到登录页,而非直接带story参数访问),所以$story_id为空,导致重定向后URL的story参数也为空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:12:33